Ḿ-01: Ƃîļîñĝüàļ ƒöŕḿàţ îñţéŕöþ
Šüḿḿàŕý
kapi extract éḿîţš à ƃîļîñĝüàļ ƒîļé ƒöŕ à ţŕàñšļàţöŕ öŕ ŕéṽîéŵéŕ; kapi merge
àþþļîéš ţĥé ŕéţüŕñéđ ţàŕĝéţš ţö ţĥé ţŕàñšļàţîöñš öƒ ţĥé þŕöĵéçţ'š šöüŕçéš,
ţĥŕöüĝĥ ţĥé çĥàñĝé šéŕṽîçé (É-09). Ţĥé
þŕöĵéçţ'š
çöñţéñţ ḿéḿöŕý þàŕţîçîþàţéš öñ ƃöţĥ šîđéš öƒ
ţĥàţ ļööþ, þŕé-ƒîļļîñĝ öñ éẋţŕàçţ àñđ àƃšöŕƃîñĝ öñ ḿéŕĝé, šö éàçĥ þàšš çöšţš
ļéšš ţĥàñ ţĥé ļàšţ.
Îñţéŕçĥàñĝé ĥàš ţŵö ţîéŕš, çĥöšéñ ƃý ŵĥö ŕéçéîṽéš ţĥé ƒîļé. Ţĥé ƃîļîñĝüàļ
.kpz îš ţĥé ñàţîṽé çàŕŕîéŕ: ļöššļéšš, đéţéŕḿîñîšţîç, çöñţéñţ-àđđŕéššéđ, ŕéàđ
ƃý à ñéöķàþî ţööļ àţ ţĥé ƒàŕ éñđ (Ḿ-06). ẊĻÎƑƑ 2.ẋ
àñđ ÞÖ àŕé ţĥé îñđüšţŕý-îñţéŕöþ ţîéŕ, ƒöŕ à ŕéçîþîéñţ ŵöŕķîñĝ îñ à ţĥîŕđ-þàŕţý
ţŕàñšļàţîöñ ţööļ.
Ƃöţĥ ţîéŕš ƒļöŵ ţĥŕöüĝĥ ţĥé šàḿé ţŵö ṽéŕƃš. Éṽéŕý üñîţ çàŕŕîéš ţĥé ŕéṽîšîöñš îţ ŵàš éẋţŕàçţéđ àĝàîñšţ, àñđ šéĝḿéñţàţîöñ îš à šţàñđ-öƒƒ öṽéŕļàý öṽéŕ ţĥé ŕüñš (Ḿ-02), šö à þŕöĵéçţ çàñ ţüŕñ šéĝḿéñţàţîöñ öñ öŕ öƒƒ ƃéţŵééñ éẋţŕàçţîöñš ŵîţĥöüţ ƃŕéàķîñĝ à ḿéŕĝé.
Öñé ļööþ, ţŵö çàŕŕîéŕš: ţĥé ñàţîṽé ƃîļîñĝüàļ .ķþž àñđ ţĥé ẊĻÎƑƑ/ÞÖ îñţéŕöþ ţîéŕ ţŕàṽéļ ţĥé šàḿé ṽéŕƃš.
Ţĥé ţŵö ṽéŕƃš
extract àñđ merge àŕé ţöþ-ļéṽéļ çöḿḿàñđš ŕàţĥéŕ ţĥàñ ñàḿéđ ƒļöŵš. Àñ
éñĝîñééŕ ŕéàđîñĝ kapi --help šééš ţĥéḿ ƃéšîđé run, àñđ ţĥéîŕ ƒļàĝ šĥàþéš (à
ŕéþéàţàƃļé -i, à çöļļéçţîöñ ƒîļţéŕ, à çöñƒļîçţ þöļîçý) đö ñöţ ƒîţ à ƒļöŵ
šţéþ'š çöñƒîĝ.
kapi extract # every target locale in the recipe
kapi extract --target-lang fr
kapi extract --target-lang fr,de,es
kapi extract --only mobile # one content collection
kapi extract --pattern 'src/**/*.json'
kapi extract --format kpz # the native bilingual carrier
kapi extract --xliff-version 2.0
kapi extract --no-memory
kapi extract --redact # placeholders out, originals stay local
kapi merge -i out/app-en-to-fr.xliff
kapi merge -i file1.xliff -i file2.xliff -i file3.po
kapi merge -i 'vendor-return/*.xliff'
kapi merge -i vendor-return/
kapi merge -i vendor-return/ --no-memory-update
Ƃöţĥ ĥàñđļé éṽéŕý ţàŕĝéţ ļöçàļé îñ öñé þàšš. Öḿîţţîñĝ --target-lang üšéš ţĥé
ŕéçîþé'š target_languages; ñàḿîñĝ à çöḿḿà-šéþàŕàţéđ šüƃšéţ ŕéšţŕîçţš îţ. Öñé
öüţþüţ ƒîļé þéŕ šöüŕçé→ţàŕĝéţ þàîŕ, àļļ šĥàŕîñĝ à šîñĝļé éẋţŕàçţîöñ ƃàţçĥ îđ.
Öñ ḿéŕĝé, -i îš ŕéþéàţàƃļé àñđ ţàķéš à þàţĥ, à ĝļöƃ, öŕ à đîŕéçţöŕý, šö à
ṽéñđöŕ'š ŵĥöļé ḿüļţî-ļàñĝüàĝé ŕéţüŕñ îš öñé îñṽöçàţîöñ; ţĥé çàŕŕîéŕ îš đéţéçţéđ
þéŕ îñþüţ, àñđ ḿîẋîñĝ ẊĻÎƑƑ àñđ ÞÖ îñ öñé ƃàţçĥ îš ƒîñé. À ƒàîļüŕé öñ öñé þàîŕ
öŕ îñþüţ îš ŕéþöŕţéđ þéŕ îţéḿ àñđ ţĥé ŕéšţ šţîļļ àþþļý, ŵîţĥ ţĥé éẋîţ çöđé
ŕéƒļéçţîñĝ àñý ƒàîļüŕé.
Ƃöţĥ ṽéŕƃš ŕéšöļṽé ţĥé þŕöĵéçţ ţĥé šàḿé ŵàý éṽéŕý þŕöĵéçţ-àŵàŕé çöḿḿàñđ đöéš:
àñ éẋþļîçîţ -p, ţĥéñ KAPI_PROJECT, ţĥéñ ţĥé ĝîţ-šţýļé üþŵàŕđ ŵàļķ ƒöŕ à
kapi.yaml ŕéçîþé (Ç-01). merge ñééđš à
þŕöĵéçţ öŕ à .kpz ŵöŕķšþàçé: kapi merge work.kpz -o out/ éḿîţš ţĥé
ţàŕĝéţ-ļàñĝüàĝé ƒîļéš öƒ àñ àđ-ĥöç ŵöŕķšþàçé ŵîţĥ ñö þŕöĵéçţ îñ šçöþé
(Ḿ-06), àñđ îñšîđé à þŕöĵéçţ kapi merge ŵîţĥ ñö
-i ḿàţéŕîàļîžéš ţĥé ţàŕĝéţ-ļàñĝüàĝé ƒîļéš ƒŕöḿ ţĥé þŕöĵéçţ'š ƃļöçķ šţöŕé,
ţĥé šîñķ ƒöŕ à þŕöçéšš-öñļý ŕüñ: ţĥé ţàŕĝéţš ţĥé šţöŕé ĥöļđš ƒöŕ à šöüŕçé
ƃéçöḿé öñé çĥàñĝé šéţ öñ îţš ţŕàñšļàţîöñ, ŵĥîçĥ ţĥé çĥàñĝé šéŕṽîçé ŵŕîţéš ƒŕöḿ
ţĥé šöüŕçé'š šķéļéţöñ. À ţŕàñšļàţîöñ ţĥàţ àļŕéàđý ĥöļđš éṽéŕý šţöŕéđ ţàŕĝéţ àñđ
éṽéŕý ƃļöçķ öƒ îţš šöüŕçé îš ļéƒţ àš îţ îš àñđ ñöţ çöüñţéđ. À ţŕàñšļàţéđ
đöçüḿéñţ ŵĥöšé šöüŕçé ĝàîñéđ öŕ ļöšţ à ƃļöçķ îš ŵŕîţţéñ àĝàîñ, ţĥé ñéŵ ƃļöçķ
îñ ţĥé šöüŕçé'š ļàñĝüàĝé. À çöļļéçţîöñ ţĥàţ ñàḿéš ñö target îš šöüŕçé-öñļý àñđ ĝéţš ñö ƒîļé.
Ŵîţĥ ñéîţĥéŕ à þŕöĵéçţ ñöŕ à ŵöŕķšþàçé îţ šàýš šö ŕàţĥéŕ ţĥàñ ĝüéššîñĝ.
Ţĥé ḿöñöļîñĝüàļ šîƃļîñĝ
extract/merge àŕé ţĥé ƃîļîñĝüàļ ŕöüñđ ţŕîþ: šöüŕçé öüţ, ţàŕĝéţ ƃàçķ.
Ţĥéŕé îš à þàŕàļļéļ ḿöñöļîñĝüàļ ŕöüñđ ţŕîþ öñ ţĥé šàḿé çöñţéñţ ḿöđéļ ƒöŕ
šöüŕçé-ļàñĝüàĝé ŵöŕķ: kapi inspect ŕéàđš à ƒîļé îñţö ƃļöçķš, éàçĥ ŵîţĥ îţš
ŕéƒéŕéñçé àñđ ŕéṽîšîöñ, àñđ kapi apply ŵŕîţéš à çĥàñĝé šéţ öƒ ŕéṽîéŵéđ éđîţš
ƃàçķ ţĥŕöüĝĥ ţĥé ƃýţé-ƒàîţĥƒüļ ŕöüñđ ţŕîþ
(É-09, Š-03).
Ţĥé þàîŕš šĥàŕé ţĥé éñĝîñé (à ƒöŕḿàţ ŕéàđéŕ àñđ ŵŕîţéŕ (É-02), ţĥé šķéļéţöñ šţöŕé ƒöŕ ƒàîţĥƒüļ ŕéçöñšţŕüçţîöñ) ƃüţ ţĥéý àñšŵéŕ đéŕéñţ ǫüéšţîöñš àñđ šţàý šéþàŕàţé ṽéŕƃš:
kapi applyļàñđš à ŕéṽîéŵéđ çĥàñĝé šéţ (à çöñţéñţ ƒîẋ, à đéçîšîöñ, öŕ àñ éđîţ ţö à ţéŕḿ, à ḿéḿöŕý þàîŕ, à ŕéçîþé ƒîéļđ) ŵĥöļé öŕ ñöţ àţ àļļ, éàçĥ éđîţ ĝüàŕđéđ ƃý ţĥé ŕéṽîšîöñ îţ ŕéàđ àñđ ƃý ţĥé îñļîñé-çöđé ƒîđéļîţý ĝüàŕđ, éẋîţîñĝ öñ ţĥé ĝàţé çöđé ŵĥéñ àñ éđîţ îš šţàļé šö à ƒîẋ ļööþ ŕéàđš àĝàîñ. Îţ ñéṽéŕ àƃšöŕƃš îñţö ţĥé ḿéḿöŕý àš à šîđé 郃éçţ.kapi mergeàþþļîéš à ţŕàñšļàţöŕ'š ŕéţüŕñéđ ţàŕĝéţš àñđ, ƃý đéƒàüļţ, àƃšöŕƃš éṽéŕý àççéþţéđ ţàŕĝéţ îñţö ţĥé çöñţéñţ ḿéḿöŕý. Ţĥàţ àççŕéţîöñ îš ŵĥàţ ḿéŕĝé îš ƒöŕ. Îţ šéñđš ţĥé ţàŕĝéţš àš à çĥàñĝé šéţ ţöö, ĝüàŕđéđ ƃý ţĥé ŕéṽîšîöñš ţĥé ŕéţüŕñéđ ƒîļé çàŕŕîéš, àñđ ţĥé çöñƒļîçţ þöļîçý šéţţļéš à ţŕàñšļàţîöñ ţĥàţ ḿöṽéđ ḿéàñŵĥîļé.
Ƒöļđîñĝ apply îñţö merge ŵöüļđ çöñţàḿîñàţé ţĥé ḿéḿöŕý ŵîţĥ ḿöñöļîñĝüàļ
šöüŕçé éđîţš; ƒöļđîñĝ merge îñţö apply ŵöüļđ ļöšé ţĥé çöñƒļîçţ þöļîçý àñđ
ţĥé ƃîļîñĝüàļ šþàñ ḿàþþîñĝ.
Çàŕŕîéŕš
Ñàţîṽé: ţĥé ƃîļîñĝüàļ .kpz. À ţàšķ-šçöþéđ þŕöƒîļé öƒ ţĥé .kpz
çöñţàîñéŕ (Ḿ-06): öñé šöüŕçé→ţàŕĝéţ þàîŕ, ţĥé ƃļöçķš
ŵîţĥ ƒàîţĥƒüļ îñļîñé çöđéš, ţĥé šéĝḿéñţàţîöñ àñđ àļîĝñḿéñţ öṽéŕļàýš, ţĥé
þéŕ-šöüŕçé šķéļéţöñ ƒöŕ ŕöüñđ-ţŕîþ, àñđ ţĥé ŕéļéṽàñţ ḿéḿöŕý-ḿàţçĥ àñđ ţéŕḿ
çöñţéẋţ, îñ öñé ļöššļéšš, đéţéŕḿîñîšţîç, çöñţéñţ-àđđŕéššéđ ƒîļé. Šéļéçţéđ ŵîţĥ
--format kpz. Îţ îš ļöššļéšš ŵĥéŕé ẊĻÎƑƑ îš ļöššý, çàŕŕîéš ḿéḿöŕý àñđ ţéŕḿ
çöñţéẋţ îñļîñé ŕàţĥéŕ ţĥàñ àš šéþàŕàţé ŢḾẊ/ŢƂẊ àţţàçĥḿéñţš, àñđ, ƃéîñĝ
Ḿéŕķļé-ĥàšĥàƃļé, ĝîṽéš îñţéĝŕîţý-ṽéŕîƒîéđ, đàƃļé ŕéṽîéŵ. Îţ îš éçöšýšţéḿ
îñţéŕçĥàñĝé: ƃöţĥ éñđš ñééđ à ñéöķàþî ŕéàđéŕ. Ḿàķîñĝ îţ à çŕöšš-ṽéñđöŕ šţàñđàŕđ
ŵöüļđ ƃé àñ öþéñ-šþéç àñđ šéçöñđ-îḿþļéḿéñţàţîöñ 郃öŕţ, ñöţ à þŕöþéŕţý öƒ ţĥé
ƃýţéš.
Îñđüšţŕý îñţéŕöþ: ẊĻÎƑƑ 2.ẋ àñđ ÞÖ. Ƒöŕ àñý ŕéçîþîéñţ öñ à ţĥîŕđ-þàŕţý
ţööļ. extract éḿîţš ẊĻÎƑƑ 2.2 ƃý đéƒàüļţ šö àñ üñķñöŵñ ŕéçîþîéñţ ĝéţš
šöḿéţĥîñĝ šàƒé. Ţĥé ŕéàđéŕ àççéþţš ţĥé ŵĥöļé 2.ẋ ñàḿéšþàçé ƒàḿîļý
(urn:oasis:names:tc:xliff:document:2.0, …2.1, …2.2) àñđ þŕéšéŕṽéš üñķñöŵñ
2.ẋ àţţŕîƃüţéš ŕöüñđ-ţŕîþ; ţĥé ŵŕîţéŕ ţàķéš --xliff-version 2.0|2.1|2.2 ƒöŕ
çöñšüḿéŕš þîññéđ ţö öļđéŕ ţööļîñĝ. ÞÖ (ĝéţţéẋţ) îš šéļéçţéđ ŵîţĥ --format po
àñđ éḿîţš öñé éñţŕý þéŕ šéĝḿéñţ šþàñ (ţĥé ŵĥöļé ƃļöçķ ŵĥéñ ţĥéŕé îš ñö
šéĝḿéñţàţîöñ öṽéŕļàý) ŵîţĥ ķàþî'š ƃööķķééþîñĝ îñ đéṽéļöþéŕ çöḿḿéñţš
(#. kapi-block: <id>).
À <unit> ţĥàţ àŕŕîṽéš ŵîţĥ à <source> àñđ ñö <target> îš ţĥé ñöŕḿàļ šĥàþé
öƒ àñ éẋţŕàçţîöñ ĥàñđéđ ţö à ţŕàñšļàţîöñ šţéþ. Ţĥé ŕéàđéŕ ŕéçöŕđš à žéŕö-ŵîđţĥ
ţàŕĝéţ þöšîţîöñ àƒţéŕ </source>, àñđ ţĥé ŵŕîţéŕ éḿîţš ţĥé <target> éļéḿéñţ
ţĥéŕé ŵĥéñ à ţŕàñšļàţîöñ éẋîšţš, šö à ƒîļé ţĥàţ àŕŕîṽéš ŵîţĥöüţ öñé ļéàṽéš ŵîţĥ
öñé àñđ à ŕüñ ţĥàţ ţŕàñšļàţéš ñöţĥîñĝ ŕéþļàýš ţĥé ƃýţéš îţ ŕéàđ.
Öţĥéŕ ƃîļîñĝüàļ ƒöŕḿàţš (ẊĻÎƑƑ 1.2, Ǫţ ŢŠ, ţĥé ţîḿéđ-ţéẋţ ƒöŕḿàţš) ŕéḿàîñ àṽàîļàƃļé àš öŕđîñàŕý ƒöŕḿàţ šüþþöŕţ ŵîţĥ ţĥéîŕ öŵñ ŕéàđéŕš àñđ ŵŕîţéŕš (/ƒöŕḿàţš). Ţĥéý àŕé ñöţ šéļéçţàƃļé àš àñ éẋţŕàçţ çàŕŕîéŕ: à þŕöĵéçţ ŵĥöšé šöüŕçéš àŕé îñ öñé öƒ ţĥéḿ éẋţŕàçţš ƒŕöḿ îţ îñţö à çàŕŕîéŕ àƃöṽé.
Àññöţàţîöñš çŕöšš ţĥé çàŕŕîéŕ
À ƃļöçķ'š ŕüñš çàŕŕý ŵĥàţ ţĥé šöüŕçé đöçüḿéñţ šţŕüçţüŕàļļý çöñţàîñéđ; ŵĥàţ à ĝöṽéŕñàñçé þàšš çöñçļüđéđ àƃöüţ ţĥàţ çöñţéñţ ŕîđéš šţàñđ-öƒƒ öñ àñ àñçĥöŕ (Ƒ-02). ẊĻÎƑƑ 2 ĥàš šöḿéŵĥéŕé ţö þüţ šüçĥ à çöñçļüšîöñ, àñđ ţĥé çàŕŕîéŕ ķééþš îţ îñ ƃöţĥ đîŕéçţîöñš.
Ŕéàđîñĝ. Àñ <mrk type="term"> ļàñđš àš à ţéŕḿ öṽéŕļàý šþàñ; éṽéŕý öţĥéŕ
<mrk> ţýþé ļàñđš àš àñ xliff2:mrk šþàñ ķééþîñĝ îţš đéçļàŕéđ ţýþé, ƃéçàüšé à
ḿàŕķéŕ ţĥîš éñĝîñé đöéš ñöţ üñđéŕšţàñđ îš šţîļļ à đéçîšîöñ šöḿéöñé ŕéçöŕđéđ.
<sm>/<em> þàîŕš àŕé çöļļéçţéđ ţĥé šàḿé ŵàý, ƃéîñĝ ŵĥàţ ẊĻÎƑƑ 2 öƒƒéŕš ƒöŕ à
šþàñ ţĥàţ ñééđ ñöţ ñéšţ; àñ <sm> ŵîţĥ ñö <em> ḿàŕķš ñöţĥîñĝ àñđ îš đŕöþþéđ.
Ţĥé ḿàŕķéŕ þöšîţîöñš àŕé ŕéƃàšéđ öñţö ţĥé ƃļöçķ ƃý ţĥé šàḿé çüŕšöŕ ŵàļķ ţĥàţ
ƃüîļđš ţĥé šéĝḿéñţ šþàñš.
Ŵŕîţîñĝ. Đŕàŵîñĝ àñ àññöţàţîöñ îš à đéçļàŕéđ ŵŕîţéŕ çàþàƃîļîţý, ƃéšîđé
ĝéñéŕàţîṽé àñđ îñţéŕçĥàñĝé: àñ InlineAnnotationWriter ñàḿéš ţĥé àññöţàţîöñ
ţýþéš îţ ķñöŵš ĥöŵ ţö đŕàŵ, àñđ ţĥé ŕéĝîšţŕý ŕéçöŕđš ţĥéḿ îñ FormatInfo
ŵîţĥöüţ ļöàđîñĝ à þļüĝîñ (É-02). Ţĥé
đéçļàŕàţîöñ îš à çéîļîñĝ. defaults.annotations.write îñ ţĥé ŕéçîþé ñàŕŕöŵš
îţ àñđ çàññöţ ŵîđéñ îţ, šö ñàḿîñĝ à ţýþé à ƒöŕḿàţ çàññöţ çàŕŕý àšķš ƒöŕ
ñöţĥîñĝ ŕàţĥéŕ ţĥàñ ƒàîļîñĝ, ƃéçàüšé öñé ŕéçîþé đéšçŕîƃéš ḿàñý öüţþüţš. Ţĥé
ẊĻÎƑƑ 2 ŵŕîţéŕ đŕàŵš à ļöçàţéđ ţéŕḿ àš àñ <sm>/<em> þàîŕ šþļîçéđ îñţö ţĥé
îñļîñé ÎŔ àţ éḿîţ ţîḿé, ñéṽéŕ àš àñ <mrk>: öñļý ţĥé þàîŕ çàŕŕîéš à šþàñ ţĥàţ
đöéš ñöţ ñéšţ îñšîđé öñé éļéḿéñţ, ŵĥîçĥ îš éẋàçţļý ŵĥàţ àñ àñçĥöŕ éẋîšţš ţö
éẋþŕéšš. À šþàñ šţŕàđđļîñĝ ţŵö <segment> éļéḿéñţš îš ţĥé öñé îţ çàññöţ đŕàŵ,
àñđ ţĥàţ îš ŕéçöŕđéđ ŕàţĥéŕ ţĥàñ ĥàļƒ-đŕàŵñ.
Ŵĥàţ à ŕéţüŕñéđ üñîţ ñàḿéš
À ŕéţüŕñéđ üñîţ ñàḿéš îţš ƃļöçķ ƃý ţĥé îđ ţĥé ŕéàđéŕ àššîĝñéđ îţ: ţĥé ẊĻÎƑƑ
üñîţ'š id, ţĥé ÞÖ éñţŕý'š kapi-block çöḿḿéñţ, ţĥé ƃļöçķ öƒ à .kpz
öṽéŕļàý. Îţ çàŕŕîéš ţŵö ŕéṽîšîöñš
(É-09): ţĥé ŕéṽîšîöñ öƒ ţĥé
ţŕàñšļàţîöñ àš ţĥé þŕöĵéçţ ĥéļđ îţ àţ ţĥé éẋţŕàçţîöñ (if-match, absent
ŵĥéŕé ţĥéŕé ŵàš ñöñé), àñđ ţĥé ŕéṽîšîöñ öƒ ţĥé šöüŕçé ţĥé üñîţ ŵàš ŕéàđ ƒŕöḿ
(basis). Ţĥé ƃàšîš îš ţĥé ŕéṽîšîöñ öƒ ţĥé šöüŕçé ţĥé üñîţ îţšéļƒ çàŕŕîéš,
àñđ éẋţŕàçţ ŕéàđš éàçĥ šöüŕçé ţĥé ŵàý ţĥé çĥàñĝé šéŕṽîçé ŕéàđš îţ, šö ţĥé üñîţš
öƒ éṽéŕý ţàŕĝéţ ļàñĝüàĝé çàŕŕý ţĥé îđš ţĥé šéŕṽîçé ĝîṽéš ţĥé ƃļöçķš. À
ŕéṽîšîöñ çöṽéŕš àñ éđîţîöñ'š ŕüñš, îñļîñé çöđéš îñçļüđéđ, àñđ ñöţĥîñĝ éļšé.
Šéĝḿéñţàţîöñ îš à šţàñđ-öƒƒ öṽéŕļàý öṽéŕ ţĥöšé ŕüñš
(Ƒ-02), ñöţ à ŕéŵŕîţé öƒ ţĥéḿ, šö îţ
ḿöṽéš ñéîţĥéŕ ţĥé ƃļöçķ'š çöñţéñţ ĥàšĥ (Ƒ-03)
ñöŕ îţš ŕéṽîšîöñ: à ƃļöçķ'š îđéñţîţý îš šţàƃļé àçŕöšš à šéĝḿéñţàţîöñ ţöĝĝļé
ƃéţŵééñ éẋţŕàçţîöñš.
Ţĥé ŕéàđéŕ-àššîĝñéđ îđ ƃéšîđé ţĥé ĥàšĥ îš ḿàđé üñîǫüé ŵĥéŕé îţ îš àššîĝñéđ. À
çöñţàîñéŕ ǫüàļîƒîéš éàçĥ đéļéĝàţéđ ƃļöçķ ƃý ţĥé ḿéḿƃéŕ îţ çàḿé ƒŕöḿ
(sf2_tu1, ţĥé šĥàþé üþšţŕéàḿ Öķàþî üšéš ƒöŕ à šüƃƒîļţéŕ), àñđ à đöçüḿéñţ ţĥàţ
ŕéþéàţš à trans-unit/@id ĝéţš öñé šţöŕé îđéñţîţý þéŕ üñîţ ŵĥîļé ţĥé šþéļļîñĝ
ţĥé đöçüḿéñţ üšéš îš ķéþţ öñ ţĥé ƃļöçķ ƒöŕ ţĥé ŵŕîţéŕ ţö éḿîţ
(É-02).
Ŵîţĥ ñö šéĝḿéñţàţîöñ öṽéŕļàý à ƃļöçķ éḿîţš öñé ẊĻÎƑƑ <segment> öŕ öñé ÞÖ
éñţŕý öṽéŕ îţš ŵĥöļé çöñţéñţ. Ŵîţĥ öñé, ţĥé ŵŕîţéŕ ḿàţéŕîàļîžéš à
<segment>/<ignorable> (öŕ à ÞÖ éñţŕý) þéŕ šþàñ àñđ ĝàþ, àñđ ḿéŕĝé ḿàþš éàçĥ
ŕéţüŕñéđ ţàŕĝéţ ƃàçķ ţö îţš šöüŕçé šþàñ ţĥŕöüĝĥ ţĥé àļîĝñḿéñţ öṽéŕļàý àñđ
šþļîçéš ţĥé ţàŕĝéţ ŕüñš îñţö þļàçé. Šéĝḿéñţ îđš ŕîđé îñšîđé ţĥé öṽéŕļàý; ţĥé
ƃļöçķ ĥàšĥ îš ţĥé ĵöîñ ķéý.
Þéŕ-šéĝḿéñţ ḿéḿöŕý ļööķüþ ƒöļļöŵš ţĥé šàḿé šþļîţ. Lookup ķéýš öñ ţĥé ŵĥöļé
ƃļöçķ ŵĥéñ ţĥéŕé îš ñö öṽéŕļàý; ŵĥéñ öñé îš þŕéšéñţ, éẋţŕàçţ îţéŕàţéš îţš šþàñš
àñđ çàļļš LookupSegment ƒöŕ šéñţéñçé-ļéṽéļ ļéṽéŕàĝé
(Ç-09).
Éẋţŕàçţîöñ ƃööķķééþîñĝ
Éàçĥ kapi extract ŕüñ ŵŕîţéš à ḿàñîƒéšţ üñđéŕ
.kapi/work/cache/extractions/<batch-id>/, àļöñĝšîđé ţĥé þéŕ-šöüŕçé šķéļéţöñš,
ƒöŕ ţĥé ñéẋţ éẋţŕàçţ ţö ŕéüšé:
schemaVersion: 1
kind: kapi-extraction
batchId: 6f2e8a1c-...
generator: { id: kapi, version: v1.x }
createdAt: 2026-04-24T10:00:00Z
inputsHash: sha256:...
sourceLocale: en
options: { format: xliff2, xliffVersion: "2.2" }
pairs:
- targetLocale: fr
output: out/northsea-en-to-fr.xliff
files:
- source: src/locales/en/app.json
sourceHash: sha256:...
blocks: 412
segments: 640
leverage: { exact: 108, fuzzy: 67, new: 237 }
skeleton: skel-<source-hash>.bin
inputsHash ƒîñĝéŕþŕîñţš éṽéŕýţĥîñĝ ƃéšîđéš à šöüŕçé ƒîļé'š öŵñ ƃýţéš ţĥàţ
šĥàþéš îţš öüţþüţ: ţĥé ŕéçîþé'š ƒöŕḿàţ çöñƒîĝ, ŕéđàçţîöñ àñđ šéĝḿéñţàţîöñ
šéţţîñĝš, ţĥé ḿéḿöŕý ţĥé þŕé-ƒîļļ đŕéŵ ƒŕöḿ, ţĥé öüţþüţ öþţîöñš. Àñ îñçŕéḿéñţàļ
ŕé-éẋţŕàçţ ŕéüšéš à þŕîöŕ ƃàţçĥ'š ŵöŕķ ƒöŕ à ƒîļé öñļý ŵĥéñ ƃöţĥ inputsHash
àñđ ţĥé ƒîļé'š sourceHash ḿàţçĥ, šö à çĥàñĝéđ ŕéçîþé öŕ à çĥàñĝéđ ḿéḿöŕý
ŕé-éẋţŕàçţš; --force šķîþš ţĥé ŕéüšé éñţîŕéļý.
Éṽéŕýţĥîñĝ à ḿéŕĝé ñééđš ƒŕöḿ ţĥé éẋţŕàçţîöñ ţŕàṽéļš îñ ţĥé ƃîļîñĝüàļ ƒîļé,
šö ţĥé ḿàñîƒéšţ çàñ ƃé ļöšţ. ẊĻÎƑƑ 2.ẋ çàŕŕîéš ƒîļé-ļéṽéļ
<note category="kapi"> ñöţéš ŵîţĥ ţĥé ƃàţçĥ îđ, ţĥé šöüŕçé þàţĥ àñđ ţĥé
šöüŕçé ĥàšĥ àţ éẋţŕàçţ ţîḿé, ţĥé ţàŕĝéţ ļàñĝüàĝé îñ trgLang, àñđ öñ éàçĥ
üñîţ àñ <mda:metadata> ŵĥöšé <mda:metaGroup category="kapi"> ĥöļđš ţĥé
if-match àñđ basis ŕéṽîšîöñš. ÞÖ çàŕŕîéš ţĥé šàḿé àš éẋţŕàçţéđ çöḿḿéñţš
(#. kapi-batch:, #. kapi-source-file:, #. kapi-source-hash: öñ ţĥé
ĥéàđéŕ éñţŕý; #. kapi-block:, #. kapi-if-match: àñđ #. kapi-basis: öñ
éàçĥ éñţŕý) àñđ ţĥé ļàñĝüàĝé îñ ţĥé ĥéàđéŕ'š Language ƒîéļđ. À ĥéàđéŕ ŵĥöšé
ļàñĝüàĝé îš ñöñé öƒ ţĥé ŕéçîþé'š ţàŕĝéţ ļàñĝüàĝéš, ƃéçàüšé àñ éđîţöŕ ŕéŵŕöţé
îţ, ĝîṽéš ŵàý ţö ţĥé éẋţŕàçţîöñ ţĥàţ ŵŕöţé ţĥé ƒîļé, ƒöüñđ îñ ţĥé ƃàţçĥ'š
ḿàñîƒéšţ ƃý ţĥé ñàḿé éẋţŕàçţ ĝàṽé îţ; ŵîţĥ ñö šüçĥ éẋţŕàçţîöñ ţĥé ḿéŕĝé öƒ
ţĥàţ ƒîļé îš ŕéƒüšéđ. À .kpz ŕéçöŕđš ţĥé ŕéṽîšîöñš ƃý ƃļöçķ îđ îñ îţš
îñţéŕçĥàñĝé ţàšķ. Ţĥé ƃàţçĥ îđ ñàḿéš
ţĥé ļöçàļ ŕéđàçţîöñ ṽàüļţ àñđ ţĥé ḿéḿöŕý þŕöṽéñàñçé; ţĥé šöüŕçé þàţĥ ñàḿéš ţĥé
đöçüḿéñţ ţĥé üñîţš ţŕàñšļàţé.
Ḿéŕĝé ŵŕîţéš éàçĥ ţŕàñšļàţîöñ ƒŕöḿ ţĥé šöüŕçé àš ţĥé þŕöĵéçţ ĥöļđš îţ, šö îţ
ñééđš ţĥé šàḿé þŕöĵéçţ ţĥé éẋţŕàçţîöñ çàḿé ƒŕöḿ. Ţĥàţ ķééþš ţĥé éḿîţţéđ ẊĻÎƑƑ
öŕ ÞÖ šḿàļļ àñđ ƒŕîéñđļý ţö à ţĥîŕđ-þàŕţý ţööļ, àñđ ķééþš ţĥé ḿéḿöŕý àƃšöŕƃ
çĥéàþ. Ţĥé þŕöĵéçţ đîŕéçţöŕý îš àļŕéàđý ţĥé üñîţ öƒ þöŕţàƃîļîţý: git push
šĥîþš îţ.
Ţĥé ḿéḿöŕý ļööþ
Öñ éẋţŕàçţ, ķàþî ǫüéŕîéš ţĥé þŕöĵéçţ'š çöñţéñţ ḿéḿöŕý ƒöŕ éṽéŕý šéĝḿéñţ îţ éḿîţš:
- àñ éẋàçţ ḿàţçĥ þŕé-ƒîļļš
<target>ŵîţĥstate="translated"; - à ƒüžžý ḿàţçĥ àţ öŕ àƃöṽé ţĥé ŕéçîþé'š ţĥŕéšĥöļđ þŕé-ƒîļļš ŵîţĥ
state="fuzzy"àñđ à ḿàţçĥ-ǫüàļîţý šüƃ-šţàţé; - àñ àḿƃîĝüöüš ḿàţçĥ (šéṽéŕàļ ƒüļļ-šçöŕé éẋàçţš ŵîţĥ đéŕîñĝ ţàŕĝéţš) îš ñéṽéŕ þŕé-ƒîļļéđ. Àñ üñàţţéñđéđ ḿéŕĝé ŵöüļđ ţüŕñ àñ àŕƃîţŕàŕý þîçķ îñţö þüƃļîšĥéđ çöñţéñţ; ļéƒţ éḿþţý, ţĥé šéĝḿéñţ šüŕƒàçéš àš üñţŕàñšļàţéđ ƒöŕ à ĥüḿàñ ţö šéţţļé.
--no-memory ţüŕñš ţĥé þŕé-ƒîļļ öƒƒ.
Öñ ḿéŕĝé, éṽéŕý àççéþţéđ ţàŕĝéţ šéĝḿéñţ îš ŵŕîţţéñ îñţö ţĥé þŕöĵéçţ'š
çöñţéñţ ḿéḿöŕý ŵîţĥ þŕöṽéñàñçé: öŕîĝîñ šöüŕçé merge, ţĥé ƃàţçĥ îđ àš ţĥé
ŕéƒéŕéñçé, ţĥé šöüŕçé ƒîļé þàţĥ àš ţĥé ķéý, àñđ ţĥé ƃļöçķ ĥàšĥ àñđ öŕîĝîñàţîñĝ
ƒîļéñàḿé àš þŕöþéŕţîéš. --no-memory-update ţüŕñš ţĥé ŵŕîţé-ƃàçķ öƒƒ.
Ƃöţĥ ĥàļṽéš àŕé öñ ƃý đéƒàüļţ ƃéçàüšé ţĥé ļööþ îš ţĥé ḿéçĥàñîšḿ: ŵîţĥöüţ ţĥé ŵŕîţé-ƃàçķ, ļéṽéŕàĝé đéçàýš ţö žéŕö, àñđ ḿàķîñĝ îţ öþţ-îñ ŵöüļđ ļéàṽé ḿöšţ þŕöĵéçţš' ḿéḿöŕîéš éḿþţý. Ŕéàđ-öñļý ḿéḿöŕîéš îḿþöŕţéđ îñţö à þŕöĵéçţ àŕé ñéṽéŕ ŵŕîţţéñ ţö, šö îḿþöŕţéđ ŢḾẊ šţàýš ŕéþŕöđüçîƃļé ƒŕöḿ îţš šöüŕçé ƒîļé.
Çöñƒļîçţ þöļîçý àñđ šţàļé üñîţš
Ḿéŕĝé çöḿþîļéš à ŕéţüŕñéđ ƒîļé îñţö öñé set_content þéŕ ţŕàñšļàţéđ üñîţ, öñ
ţĥé éđîţîöñ öƒ ţĥé üñîţ'š ļàñĝüàĝé, ŵîţĥ ţĥé üñîţ'š if-match àš îţš
if_match àñđ îţš basis àš îţš basis, àñđ àþþļîéš ţĥé çĥàñĝé šéţ üñđéŕ
require_basis àñđ ţĥé éñƒöŕçé ĝàţé ţĥŕöüĝĥ ţĥé çĥàñĝé šéŕṽîçé. Ţĥé šéŕṽîçé
ŕéàđš ţĥé šöüŕçé ŵîţĥ îţš ţŕàñšļàţîöñ ĵöîñéđ ƒŕöḿ ţĥé ƒîļé ţĥé ŕéçîþé'š ţàŕĝéţ
ţéḿþļàţé ñàḿéš, àþþļîéš ţĥé öþéŕàţîöñš, àñđ ŵŕîţéš ţĥàţ ƒîļé
(filehome.Options.Materialize). À ţŕàñšļàţîöñ îñ à đöçüḿéñţ ƒöŕḿàţ îš ŵŕîţţéñ
ƒŕöḿ ţĥé šöüŕçé'š šķéļéţöñ, šö îţ ƒöļļöŵš îţš šöüŕçé'š šţŕüçţüŕé. À ţŕàñšļàţîöñ
çàţàļöĝ îñ îţš öŵñ ŕîĝĥţ (à ÞÖ çàţàļöĝ ƃéšîđé à ÞÖ šöüŕçé) îš ŕéàđ àñđ ŵŕîţţéñ
îñ îţš ļàñĝüàĝé: ŵĥîļé îţ ĥöļđš éṽéŕý ḿéššàĝé öƒ îţš šöüŕçé îţ îš ŵŕîţţéñ
ţĥŕöüĝĥ îţš öŵñ šķéļéţöñ, šö îţš ĥéàđéŕ àñđ çöḿḿéñţš šţàý, àñđ öñçé ţĥé šöüŕçé
ĝàîñéđ öŕ ļöšţ à ḿéššàĝé îţ îš ŵŕîţţéñ ƒŕöḿ ţĥé šöüŕçé'š šķéļéţöñ, ĥéàđéŕ
îñçļüđéđ. Ŕéđàçţéđ öŕîĝîñàļš àŕé ŕéšţöŕéđ ƃéƒöŕé ţĥé üñîţš àŕé çöḿþîļéđ
(Ç-10).
À üñîţ ŵĥöšé šöüŕçé çĥàñĝéđ šîñçé ţĥé éẋţŕàçţîöñ îš ŕéƒüšéđ stale ñàḿîñĝ
basis. Îţ îš ŕéþöŕţéđ, ñöţ àþþļîéđ, àñđ ñöţ àƃšöŕƃéđ îñţö ţĥé ḿéḿöŕý. À
üñîţ ţĥàţ çàŕŕîéš îţš šöüŕçé ţéẋţ îš ĥéļđ ţö îţ àš ŵéļļ, ŵĥàţéṽéŕ basis îţ
ñàḿéš: îţ àþþļîéš öñļý ŵĥîļé ţĥé ƃļöçķ îţš îđ ñàḿéš ĥöļđš ţĥàţ šöüŕçé. À üñîţ
ţĥàţ çàŕŕîéš ñö basis àþþļîéš ŵĥéñ ţĥé šöüŕçé îţ çàŕŕîéš îš ţĥé šöüŕçé àš îţ
šţàñđš, öŕ, ƒöŕ à çàŕŕîéŕ ŵîţĥ ñö šöüŕçé ţéẋţ, ŵĥéñ ţĥé šöüŕçé ƒîļé'š ĥàšĥ îš
ţĥé öñé ţĥé ƒîļé ŕéçöŕđš. À üñîţ ŵĥöšé ƃļöçķ îš ĝöñé îš šţàļé ţöö.
À üñîţ ŵĥöšé ţŕàñšļàţîöñ çĥàñĝéđ îñ ţĥé þŕöĵéçţ šîñçé ţĥé éẋţŕàçţîöñ îš ŕéƒüšéđ
stale ñàḿîñĝ if_match, àñđ defaults.merge.conflict_policy šéţţļéš îţ:
translator-wins(đéƒàüļţ): ḿéŕĝé šéñđš ţĥé üñîţ àĝàîñ öṽéŕ ţĥé ŕéṽîšîöñ ţĥé þŕöĵéçţ ñöŵ ĥöļđš, àñđ ţĥé ŕéţüŕñéđ ţàŕĝéţ ŕéþļàçéš îţ.existing-wins: ţĥé þŕöĵéçţ'š ţŕàñšļàţîöñ îš ķéþţ àñđ ţĥé ŕéţüŕñéđ öñé îš šķîþþéđ.newest-wins: ţĥé ŕéţüŕñéđ ţàŕĝéţ ŕéþļàçéš îţ ŵĥéñ ţĥé ŕéţüŕñéđ ƒîļé îš ñéŵéŕ ţĥàñ ţĥé ţŕàñšļàţîöñ'š ƒîļé, àñđ îš šķîþþéđ öţĥéŕŵîšé.
Éàçĥ þàšš đŕöþš ţĥé üñîţš ŕéƒüšéđ ƒöŕ ĝööđ àñđ šéñđš ţĥé ŕéšţ àĝàîñ àš öñé
çĥàñĝé šéţ, šö ţĥé üñîţš ţĥàţ ļàñđ àŕé ŵŕîţţéñ àţöḿîçàļļý. Ţĥéŕé îš ñö
îñţéŕàçţîṽé þŕöḿþţ, šö ḿéŕĝé šţàýš šçŕîþţàƃļé îñ ÇÎ. Àñý öţĥéŕ ŕéƒüšàļ îš ŕéþöŕţéđ þéŕ üñîţ öñ šţđéŕŕ
àñđ çöüñţéđ àš refused: à ŕéţüŕñéđ ţàŕĝéţ ţĥàţ đŕöþš àñ îñļîñé çöđé îţš
šöüŕçé þŕöţéçţš, öŕ öñé ţĥàţ îñţŕöđüçéš à ƒàîļîñĝ ƒîñđîñĝ öƒ à ŕüļé ţĥàţ
ĝöṽéŕñš îţ (gate_failed, É-09). À
ƒîļé öƒ ŵĥîçĥ ñöţĥîñĝ ļàñđš ƒàîļš.
Þàŕţîàļ ŕéţüŕñš àŕé öŕđîñàŕý: ḿéŕĝé àþþļîéš ţĥé ţŕàñšļàţéđ üñîţš, àñđ à üñîţ ţĥé ŕéţüŕñ đöéš ñöţ çàŕŕý ķééþš ŵĥàţ ţĥé ţŕàñšļàţîöñ ƒîļé ĥéļđ. Ţĥàţ ĥöļđš àš ƒàŕ àš ţĥé ĵöîñ þàîŕš ţĥé ƒîļé'š ƃļöçķš ŵîţĥ ţĥé šöüŕçé'š: ƃý ķéý, ţĥéñ ƃý ţŕàñšļàţîöñ-îñṽàŕîàñţ àđđŕéšš, ţĥéñ ƃý þöšîţîöñ. À ƒöŕḿàţ ŵĥöšé üñîţš ĥàṽé à ķéý öƒ ţĥéîŕ öŵñ (à ĴŠÖÑ ķéý, à ÞÖ ḿéššàĝé) þàîŕš éṽéŕý üñîţ ŵĥàţéṽéŕ ŵàš îñšéŕţéđ. À üñîţ ñàḿéđ ƃý îţš þöšîţîöñ îñ à šéçţîöñ (à Ḿàŕķđöŵñ öŕ ĤŢḾĻ þàŕàĝŕàþĥ) þàîŕš ƃý ţĥàţ þöšîţîöñ, šö öñçé ţĥé šöüŕçé ĝàîñš öŕ ļöšéš à ƃļöçķ ţĥé ƃļöçķš àƒţéŕ îţ îñ ţĥàţ šéçţîöñ þàîŕ ŵîţĥ ţĥéîŕ ñéîĝĥƃöüŕš' ţŕàñšļàţîöñš; à ŕéţüŕñ ƒöŕ šüçĥ à ƒîļé çàŕŕîéš éṽéŕý üñîţ.
Ŕéçîþé šüŕƒàçé
defaults:
source_language: en
target_languages: [fr, de, es]
merge:
conflict_policy: translator-wins # | existing-wins | newest-wins
memory:
fuzzy_threshold: 75 # 0..100
segmentation:
source: false # opt-in overlay on extract
srx: rules.srx # optional SRX ruleset override
annotations:
write: [term] # narrows what a writer draws inline
Üñķñöŵñ ƒîéļđš àŕé ŕéĵéçţéđ ŵîţĥ à çļéàŕ éŕŕöŕ àñđ éñüḿ ṽàļüéš àŕé ṽàļîđàţéđ àĝàîñšţ ţĥé àļļöŵéđ šéţ. Éàçĥ šéçţîöñ'š đéƒàüļţš àþþļý ŵĥéñ îţ îš àƃšéñţ.
Ŕéļàţéđ
- Ƒ-02: Ţĥé çöñţéñţ ḿöđéļ: ŕüñš, öṽéŕļàýš, àñđ ŵĥý šéĝḿéñţàţîöñ đöéš ñöţ ḿöṽé à ƃļöçķ'š îđéñţîţý
- Ƒ-03: Îđéñţîţý: ţĥé çöñţéñţ ĥàšĥ ţĥàţ îš ţĥé ḿéŕĝé ķéý
- É-02: Ţĥé ƒöŕḿàţ šýšţéḿ: ţĥé ẊĻÎƑƑ, ÞÖ àñđ šķéļéţöñ ḿàçĥîñéŕý ţĥé çàŕŕîéŕš ŕîđé öñ, ţĥé ḿàŕķš à ŵŕîţéŕ çàñ đŕàŵ, àñđ ŕéàđéŕ-àššîĝñéđ îđéñţîţý
- Ḿ-02: Šéĝḿéñţàţîöñ: ţĥé öṽéŕļàý à šéĝḿéñţ šþàñ çöḿéš ƒŕöḿ
- Ḿ-06: Çöñţéñţ þàçķàĝéš: ţĥé
.kpzçöñţàîñéŕ, îţš ƃîļîñĝüàļ þŕöƒîļé, àñđ ţĥé àđ-ĥöç ŵöŕķšþàçé - Ç-01: Ţĥé þŕöĵéçţ ḿöđéļ: ŕéçîþé ŕéšöļüţîöñ àñđ ţĥé éẋţŕàçţîöñ çàçĥé
- Ç-09: Çöñţéñţ ḿéḿöŕý: ļööķüþ, šéĝḿéñţ ļööķüþ, àñđ ḿéŕĝé þŕöṽéñàñçé
- Ç-10: Ŕéđàçţîöñ: ŵĥàţ
--redactķééþš öüţ öƒ à ƒîļé ţĥàţ ļéàṽéš ţĥé ḿàçĥîñé - Š-03: Àĝéñţ šüŕƒàçéš: ţĥé ḿöñöļîñĝüàļ
inspect/applyļööþ