Šķîþ ţö ḿàîñ çöñţéñţ

Þŕöĵéçţš

Ţĥéŕé àŕé ţŵö ŵàýš ţö đŕîṽé Kapi, àñđ îţ'š ţĥé šàḿé çöḿḿàñđš éîţĥéŕ ŵàý. Ŵĥàţ çĥàñĝéš îš ŵĥéţĥéŕ Kapi ŕéḿéḿƃéŕš àñýţĥîñĝ ƃéţŵééñ ŕüñš.

Àđ-ĥöç: öñé-öƒƒ, ñöţĥîñĝ šàṽéđ

Ŕüñ à ţööļ öŕ ƒļöŵ đîŕéçţļý öñ ţĥé ƒîļéš ýöü ñàḿé. Ñöţĥîñĝ îš ķéþţ; ŵĥéñ îţ'š đöñé, îţ'š đöñé.

Ţŕàñšļàţé ţĥîš öñé ƒîļé ţö Ƒŕéñçĥ. · Çĥéçķ ţĥîš ƒöļđéŕ ƒöŕ öƒƒ-ƃŕàñđ ţéŕḿš.

Ţĥîš îš ţĥé ǫüîçķ þàţĥ ƒöŕ à öñé-ţîḿé ĵöƃ, à šçŕîþţ, öŕ à ÇÎ šţéþ. Îñ ţĥé ÇĻÎ ýöü ñàḿé ţĥé ƒîļéš ŵîţĥ ƒļàĝš; îñ Kapi Đéšķţöþ ýöü þîçķ ţĥéḿ àš ǫüîçķ ţööļš.

Þŕöĵéçţ: à ŕéçîþé þļüš à ḿéḿöŕý

À þŕöĵéçţ îš à šḿàļļ kapi.yaml ŕéçîþé ƒîļé (ŵĥîçĥ ƒîļéš çöüñţ àš çöñţéñţ, ţĥé ṽöîçé, ţéŕḿš àñđ çööŕđîñàţéš ţĥàţ ĝöṽéŕñ ţĥéḿ, ýöüŕ ƒļöŵš àñđ đéƒàüļţš, àñđ, îƒ ýöü ţŕàñšļàţé, ýöüŕ ļàñĝüàĝéš) þļüš à šţöŕé ţĥàţ ŕéḿéḿƃéŕš ýöüŕ ŵöŕķ: ţŕàñšļàţîöñš, ţéŕḿîñöļöĝý, àñđ ŵĥéŕé éàçĥ üñîţ šţàñđš îñ ŕéṽîéŵ, ŕéàđý ţö ŕéüšé öñ ţĥé ñéẋţ ŕüñ. Kapi ƒîñđš ţĥé þŕöĵéçţ àüţöḿàţîçàļļý ƃý ŵàļķîñĝ üþ ţĥé ƒöļđéŕ ţŕéé, ţĥé ŵàý ĝîţ ƒîñđš îţš ŕéþö.

Ţŕàñšļàţé ţĥîš ŵĥöļé ŕéþö éṽéŕý ŕéļéàšé, ŕéüšîñĝ éṽéŕýţĥîñĝ ţŕàñšļàţéđ ļàšţ ţîḿé.

Àđ-ĥöçÞŕöĵéçţ
Šéţüþñöñéà kapi.yaml ŕéçîþé (çöḿḿîţ îţ)
Ḿéḿöŕýñöţĥîñĝ šàṽéđà šţöŕé àççüḿüļàţéš ŵöŕķ (çöñţéñţ ḿéḿöŕý, ţéŕḿš, àþþŕöṽàļš)
Ƒîñđš ýöüŕ ƒîļéšýöü ñàḿé ţĥéḿđîšçöṽéŕéđ àüţöḿàţîçàļļý
Ţĥé ḿàîñ ṽéŕƃkapi <tool> <file>kapi up, ƃŕîñĝ ţĥé þŕöĵéçţ üþ ţö đàţé
Ƃéšţ ƒöŕöñé-öƒƒš, šçŕîþţš, ÇÎà ŕéþö ýöü ŵöŕķ öñ ŕéþéàţéđļý

Šéţ öñé üþ: ýöüŕ ƒîŕšţ þŕöĵéçţ. Îñ à þŕöĵéçţ, kapi up ŕüñš ţĥé đéƒàüļţ ƒļöŵ üñţîļ éṽéŕý ĝàţéđ šçöþé îš šĥîþþàƃļé öŕ þàŕķéđ ƒöŕ à ĥüḿàñ, kapi status šĥöŵš šţàñđîñĝ, àñđ kapi check --ship éñƒöŕçéš ţĥé ĝàţéš; ţĥé ḿöđéļ ƃéĥîñđ ţĥöšé ṽéŕƃš îš ţĥé kapi ļööþ.

Ţĥé ḿéçĥàñîçš: šöüŕçé → ƒļöŵ → šîñķ

Kapi ĥàš öñé šéţ öƒ çöḿḿàñđš, àñđ ŵĥàţ çĥàñĝéš ƃéţŵééñ àđ-ĥöç àñđ þŕöĵéçţ üšé îš ţĥé ƃîñđîñĝ: ŵĥéŕé çöñţéñţ éñţéŕš (ţĥé šöüŕçé) àñđ ŵĥéŕé ŕéšüļţš ĝö (ţĥé šîñķ), ŕéšöļṽéđ ŵĥéñ ýöü ŕüñ.

sourcebindingchanrecyclechantranslatechanqachansinkbinding
ƂîñđîñĝÀš šöüŕçéÀš šîñķ
file (đéƒàüļţ)ŕéàđ + þàŕšé à ƒîļéŵŕîţé ţĥé ƒîļé ƃàçķ (ŕöüñđ-ţŕîþ ṽîà šķéļéţöñ)
storeţĥé þŕöĵéçţ šţöŕé (ƃļöçķš + öṽéŕļàýš)çöḿḿîţ öṽéŕļàýš, ñö ƒîļé
îñţéŕçĥàñĝéîḿþöŕţ ẊĻÎƑƑ / ÞÖ / à ƃîļîñĝüàļ .kpzéḿîţ öñé ƒöŕ à ţŕàñšļàţöŕ
noneñ/àđîšçàŕđ (çĥéçķš/àñàļýšîš öñļý)
  • Àđ-ĥöç = ţĥé file ƃîñđîñĝ: ýöü ñàḿé -i/-o.
  • Îñ à þŕöĵéçţ, ţĥé đéƒàüļţ šîñķ îš ţĥé šţöŕéþŕöçéšš-öñļý ŕüñ); àñ éẋþļîçîţ -o ƒöŕçéš à ƒîļé îñšţéàđ.

À þŕöçéšš-öñļý ŕüñ þéŕšîšţš öñļý ŵöŕķîñĝ öüţþüţ: ţàŕĝéţ öṽéŕļàýš îñ ţĥé ƃļöçķ ţàƃļéš öƒ .kapi/work/store.db, þŕé-ḿéŕĝé. Îţ ñéṽéŕ ŕéçöŕđš à ŕéṽîéŵ đéçîšîöñ: ţĥöšé àŕé àüţĥöŕéđ ƃý kapi apply àñđ þüƃļîšĥéđ ƃý kapi commit ţö .kapi/state/, àñđ à ƒļöŵ'š šîñķ ñéṽéŕ ŵŕîţéš ţĥéḿ. Ţĥé šţöŕé ŕéƃüîļđš ƒŕöḿ ŵĥàţ ţĥé þŕöĵéçţ çöḿḿîţš; ţĥé đéçîšîöñš àŕé ţĥé àüţĥöŕéđ þàŕţ. Šéé ţĥé þŕöĵéçţ šţöŕé.

--explain þŕîñţš ţĥé ŕéšöļṽéđ ƃîñđîñĝ ŵîţĥöüţ ŕüññîñĝ:

kapi run translate-qa -i app.json -o app.fr.json --explain
# → flow translate-qa: file(app.json) → file(app.fr.json)
kapi run translate-qa -i app.json --explain # inside a project
# → flow translate-qa: file(app.json) → store

Ţŵö þŕöĵéçţ ļööþš, ƃöţĥ éñđîñĝ àţ merge

1. Ţĥé kapi ļööþ (ţĥé éṽéŕýđàý öñé): kapi up ŕüñš ţĥé đéƒàüļţ ƒļöŵ öṽéŕ éṽéŕý ļöçàļé šĥöŕţ öƒ îţš ĝàţé àñđ ḿàţéŕîàļîžéš ţĥé ţŕàñšļàţéđ ƒîļéš; ŵĥàţ à ḿàçĥîñé çàñ'ţ ƒîñîšĥ þàŕķš ƒöŕ ŕéṽîéŵ.

2. Îñţéŕçĥàñĝé ļööþ (ĥàñđ ƃîļîñĝüàļ ƒîļéš ţö à ţŕàñšļàţöŕ öŕ ÇÀŢ ţööļ):

kapi extractmemory pre-fillbilingual fileXLIFF / PO / .kpztranslate elsewherekapi merge+ memory absorbtranslated files
kapi extract --target-lang fr,de # → out/*.xliff (or --format kpz)
# …translate the bilingual files…
kapi merge -i out/ # apply back onto sources, absorb into memory

Šéé ţĥé ƃîļîñĝüàļ ŵöŕķƒļöŵ ƒöŕ ţĥé îñţéŕçĥàñĝé ļööþ îñ đéþţĥ.

Ţĥé .kpz þàŕçéļ: ḿöṽé ŵöŕķ ŵîţĥöüţ à šéŕṽéŕ

À .kpz îš à þöŕţàƃļé, šîñĝļé-ƒîļé çàŕŕîéŕ: ĥöŵ ýöü ĥàñđ ŵöŕķ ƃéţŵééñ ḿàçĥîñéš öŕ þéöþļé ŵîţĥöüţ à šéŕṽéŕ. Ţŵö þŕöƒîļéš:

# Whole-project snapshot: a runnable "project in a file"
kapi pack -o snapshot.kpz # recipe + content + memory & terms
kapi unpack snapshot.kpz # rehydrate elsewhere

# Bilingual interchange: for a kapi-equipped reviewer
kapi extract --format kpz --target-lang fr
kapi merge bundle.fr.kpz

Šöüŕçé ţŕàṽéļš àš îđéñţîţý + à ŕöüñđ-ţŕîþ šķéļéţöñ ƃý đéƒàüļţ; --with-source éḿƃéđš ţĥé ŕàŵ öŕîĝîñàļš. Þàüšé & ŕéšüḿé à ƃîĝ ŕüñ ŵàļķš ţĥé .kpz ŵöŕķšþàçé ļîƒéçýçļé.

Ŵĥàţ à šñàþšĥöţ çàŕŕîéš

kapi info àñšŵéŕš ţĥîš ƒöŕ ţĥé þŕöĵéçţ ýöü àŕé šţàñđîñĝ îñ (ƃéƒöŕé ýöü þàçķ îţ) àñđ ƒöŕ àñ àŕçĥîṽé ýöü ĥàṽé ƃééñ ĥàñđéđ. Ƃöţĥ ļîšţ ţĥé šàḿé þàŕţš:

ÞàŕţŴĥàţ îţ îš
recipeţĥé þŕöĵéçţ'š kapi.yaml, ŵîţĥ ţĥé ṽéñüé ƃîñđîñĝ, hooks àñđ automations šţŕîþþéđ šö ţĥéý ţŕàṽéļ îñéŕţ
sourcesšöüŕçé îđéñţîţý + þéŕ-ƒîļé ŕöüñđ-ţŕîþ šķéļéţöñš (ŕàŵ ƃýţéš öñļý ŵîţĥ --with-source)
blocksţĥé éẋţŕàçţéđ çöñţéñţ ƃļöçķš (.kbf.json)
overlaysçöḿḿîţţéđ ţàŕĝéţ öṽéŕļàýš, öñé þéŕ ļöçàļé
memoryţĥé àüţĥöŕîţàţîṽé çöñţéñţ ḿéḿöŕý (.memory.json)
termsţĥé àüţĥöŕîţàţîṽé ţéŕḿš (.terms.json)
historyàñ àđṽîšöŕý þŕöṽéñàñçé çĥàîñ (--log)

Đéļîƃéŕàţéļý ñöţ çàŕŕîéđ: .kapi/work/cache/ (ŕéĝéñéŕàƃļé: þàŕšé çàçĥé, éẋţŕàçţîöñš, çöļļéçţîöñš), çŕéđéñţîàļš (ţĥéý ļîṽé îñ ţĥé ÖŠ ķéýçĥàîñ), àñđ šéŕṽéŕ šýñç ţöķéñš. À šñàþšĥöţ îš šţàţé ýöü çöüļđ ñöţ ŕéçöḿþüţé, ñéṽéŕ šéçŕéţš àñđ ñéṽéŕ đéŕîṽéđ đàţà. À þàŕţ ŵîţĥ ñöţĥîñĝ îñ îţ îš àƃšéñţ ƒŕöḿ ţĥé àŕçĥîṽé.

kapi info # this project: what a snapshot would capture
kapi info handoff.kpz # this archive: what it holds
kapi info --output-format json # either form, machine-readable

Éàçĥ þàŕţ ŕéþöŕţš ŵĥéţĥéŕ îţ îš þŕéšéñţ àñđ ĥöŵ ḿàñý îţéḿš îţ ĥöļđš, ḿéàšüŕéđ ţĥé ŵàý pack çöļļéçţš îţ: sources çöüñţš ŵĥàţ ţĥé éẋţŕàçţîöñ ḿàñîƒéšţš ŕéçöŕđ ŕàţĥéŕ ţĥàñ ŵĥàţ ţĥé ŕéçîþé ţŕàçķš, šö à þŕöĵéçţ ţĥàţ ĥàš ñéṽéŕ ƃééñ éẋţŕàçţéđ ŕéþöŕţš ñöñé. À þàŕţ ţĥàţ îš àƃšéñţ šàýš ŵĥàţ ŵöüļđ þŕöđüçé îţ.

À ŵöŕķšþàçé .kpz (ţĥé àđ-ĥöç þàŕçéļ ŵîţĥ à šĥàđöŵ çàçĥé, ŕàţĥéŕ ţĥàñ à þŕöĵéçţ šñàþšĥöţ) àñšŵéŕš à đéŕéñţ ǫüéšţîöñ, šö kapi info work.kpz öñ öñé ŕéþöŕţš îţš đöçüḿéñţš, ļöçàļéš àñđ ŵĥéţĥéŕ ţĥé çàçĥé ĥöļđš ŵöŕķ ñöţ ýéţ þàçķéđ ƃàçķ îñţö ţĥé ƒîļé.

pack ŵŕîţéš éẋàçţļý ţĥé þàŕţš info ļîšţš àñđ unpack ŕéšţöŕéš éẋàçţļý ţĥöšé þàŕţš: ţĥé çöñţéñţ ḿéḿöŕý, ţĥé ţéŕḿš, ţĥé ƃļöçķš àñđ öṽéŕļàýš, ţĥé šķéļéţöñš, àñđ, ŵîţĥ --with-source, ţĥé ŕàŵ šöüŕçé ƒîļéš, ŵĥîçĥ unpack ŵŕîţéš ƃàçķ îñţö ţĥé ţŕéé ŵîţĥöüţ öṽéŕŵŕîţîñĝ àñýţĥîñĝ àļŕéàđý ţĥéŕé. Àĝŕééḿéñţ ƃéţŵééñ kapi info öñ à þŕöĵéçţ àñđ öñ îţš šñàþšĥöţ îš ţĥéŕéƒöŕé ţĥé ŕöüñđ-ţŕîþ çĥéçķ. pack ŕéƒüšéš ţö ŵŕîţé à çöñţéñţ-ļéšš àŕçĥîṽé ŕàţĥéŕ ţĥàñ ĥàñđ öṽéŕ àñ éḿþţý ƒîļé.

Đö ţĥé ḿöđéš ḿîẋ?

Ýéš: šàḿé çöḿḿàñđš, đéŕéñţ ƃîñđîñĝš:

Ýöü ŵàñţ…Üšé
À ţĥŕöŵàŵàý ĵöƃ öñ öñé ƒîļéàđ-ĥöç (kapi <tool> öŕ run -i -o)
À ŕéþö ýöü ŵöŕķ öñ ŕéþéàţéđļý (àççüḿüļàţîñĝ ḿéḿöŕý)þŕöĵéçţ (add / up / merge)
Ţö ḿöṽé ŵöŕķ ƃéţŵééñ ḿàçĥîñéš/þéöþļé.kpz þàŕçéļ (pack öŕ extract --format kpz)

À ţööļ ŕüñ îñšîđé à þŕöĵéçţ (kapi translate src/app.json) šţîļļ þîçķš üþ ţĥé þŕöĵéçţ'š đéƒàüļţš àñđ çöñţéñţ ḿéḿöŕý ŵĥîļé ŵöŕķîñĝ öñ öñé ƒîļé. Ţĥé öñé ţĥîñĝ ţö àṽöîđ: ţŵö šţàţéƒüļ šţöŕéš öṽéŕ ţĥé šàḿé çöñţéñţ, àñ àđ-ĥöç .kpz ŵöŕķšþàçé àñđ à kapi þŕöĵéçţ ƒöŕ ţĥé šàḿé ƒîļéš. Îñšîđé à þŕöĵéçţ, àñ éẋþļîçîţ -o ŵŕîţéš à ƒîļé àñđ šķîþš ţĥé šţöŕé öñ þüŕþöšé; --explain šĥöŵš ŵĥîçĥ ýöü ĝöţ.

Šéé àļšö