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

Ḿ-01: Ƃîļîñĝüàļ ƒöŕḿàţ îñţéŕöþ

Šüḿḿàŕý

kapi extract éḿîţš à ƃîļîñĝüàļ ƒîļé ƒöŕ à ţŕàñšļàţöŕ öŕ ŕéṽîéŵéŕ; kapi merge àþþļîéš ţĥé ŕéţüŕñéđ ţàŕĝéţš ƃàçķ öñţö ţĥé þŕöĵéçţ'š šöüŕçéš. Ţĥé þŕöĵéçţ'š çöñţéñţ ḿéḿöŕý þàŕţîçîþàţéš öñ ƃöţĥ šîđéš öƒ ţĥàţ ļööþ, þŕé-ƒîļļîñĝ öñ éẋţŕàçţ àñđ àƃšöŕƃîñĝ öñ ḿéŕĝé, ŵĥîçĥ îš ŵĥàţ ḿàķéš éàçĥ þàšš çĥéàþéŕ ţĥàñ ţĥé ļàšţ.

Îñţéŕçĥàñĝé ĥàš ţŵö ţîéŕš, çĥöšéñ ƃý ŵĥö ŕéçéîṽéš ţĥé ƒîļé. Ţĥé ƃîļîñĝüàļ .kpz îš ţĥé ñàţîṽé çàŕŕîéŕ: ļöššļéšš, đéţéŕḿîñîšţîç, çöñţéñţ-àđđŕéššéđ, ŕéàđ ƃý à neokapi ţööļ àţ ţĥé ƒàŕ éñđ (Ḿ-06). ẊĻÎƑƑ 2.ẋ àñđ ÞÖ àŕé ţĥé îñđüšţŕý-îñţéŕöþ ţîéŕ, ƒöŕ à ŕéçîþîéñţ ŵöŕķîñĝ îñ à ţĥîŕđ-þàŕţý ţŕàñšļàţîöñ ţööļ.

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

pre-fillabsorbsourcesproject contentextractkapi extractbilingual file.kpz · XLIFF · POreturned filetargets filled inmergekapi mergesourcesper-locale outputcontent memoryproject store

Öñé ļööþ, ţŵö çàŕŕîéŕš: ţĥé ñàţîṽé ƃîļîñĝüàļ .ķþž àñđ ţĥé ẊĻÎƑƑ/ÞÖ îñţéŕöþ ţîéŕ ţŕàṽéļ ţĥé šàḿé ṽéŕƃš.

Ţĥé ţŵö ṽéŕƃš

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 ḿàţéŕîàļîžéš ţĥé ţàŕĝéţ-ļàñĝüàĝé ƒîļéš ƒŕöḿ ţĥé þŕöĵéçţ'š ƃļöçķ šţöŕé, ţĥé šîñķ ƒöŕ à þŕöçéšš-öñļý ŕüñ. Ŵîţĥ ñéîţĥéŕ à þŕöĵéçţ ñöŕ à ŵöŕķšþàçé îţ šàýš šö ŕàţĥéŕ ţĥàñ ĝüéššîñĝ.

Ţĥé ḿöñöļîñĝüàļ šîƃļîñĝ

extract/merge àŕé ţĥé ƃîļîñĝüàļ ŕöüñđ ţŕîþ: šöüŕçé öüţ, ţàŕĝéţ ƃàçķ. Ţĥéŕé îš à þàŕàļļéļ ḿöñöļîñĝüàļ ŕöüñđ ţŕîþ öñ ţĥé šàḿé çöñţéñţ ḿöđéļ ƒöŕ šöüŕçé-ļàñĝüàĝé ŵöŕķ: kapi inspect ŕéàđš à ƒîļé îñţö àñçĥöŕéđ ƃļöçķš àñđ kapi apply ŵŕîţéš à ţýþéđ çĥàñĝé-šéţ öƒ ŕéṽîéŵéđ éđîţš ƃàçķ ţĥŕöüĝĥ ţĥé ƃýţé-ƒàîţĥƒüļ ŕöüñđ ţŕîþ (Š-03).

Ţĥé þàîŕš šĥàŕé ţĥé éñĝîñé (à ƒöŕḿàţ ŕéàđéŕ àñđ ŵŕîţéŕ (É-02), ţĥé ƃļöçķ çöñţéñţ ĥàšĥ àš îđéñţîţý, ţĥé šķéļéţöñ šţöŕé ƒöŕ ƒàîţĥƒüļ ŕéçöñšţŕüçţîöñ) ƃüţ ţĥéý àñšŵéŕ đéŕéñţ ǫüéšţîöñš àñđ šţàý šéþàŕàţé ṽéŕƃš:

  • kapi apply ļàñđš à ŕéṽîéŵéđ çĥàñĝé-šéţ (à çöñţéñţ ƒîẋ, öŕ àñ éđîţ ţö à ţéŕḿ, à ḿéḿöŕý þàîŕ, à ṽöîçé ŕüļé, à ŕéçîþé ƒîéļđ) ƃéĥîñđ à content_hash đŕîƒţ ĝüàŕđ àñđ àñ îñļîñé-çöđé ƒîđéļîţý ĝüàŕđ, éẋîţîñĝ öñ ţĥé ĝàţé çöđé ŵĥéñ àñ éđîţ îš šţàļé šö à ƒîẋ ļööþ ŕé-îñšþéçţš. Îţ ñéṽéŕ ţöüçĥéš à ţàŕĝéţ ļöçàļé àñđ ñéṽéŕ àƃšöŕƃš îñţö ţĥé ḿéḿöŕý àš à šîđé 郃éçţ.
  • kapi merge àþþļîéš à ţŕàñšļàţöŕ'š ŕéţüŕñéđ ţàŕĝéţš àñđ, ƃý đéƒàüļţ, àƃšöŕƃš éṽéŕý àççéþţéđ ţàŕĝéţ îñţö ţĥé çöñţéñţ ḿéḿöŕý. Ţĥàţ àççŕéţîöñ îš ŵĥàţ ḿéŕĝé îš ƒöŕ; îţ îš ĝöṽéŕñéđ ƃý ţĥé çöñƒļîçţ þöļîçý àñđ šţàļé-šéĝḿéñţ đéţéçţîöñ ŕàţĥéŕ ţĥàñ à þéŕ-ƃļöçķ đŕîƒţ ĝüàŕđ.

Ƒöļđîñĝ apply îñţö merge ŵöüļđ çöñţàḿîñàţé ţĥé ḿéḿöŕý ŵîţĥ ḿöñöļîñĝüàļ šöüŕçé éđîţš; ƒöļđîñĝ merge îñţö apply ŵöüļđ ļöšé ţĥé çöñƒļîçţ þöļîçý àñđ ţĥé ƃîļîñĝüàļ šþàñ ḿàþþîñĝ.

Çàŕŕîéŕš

Ñàţîṽé: ţĥé ƃîļîñĝüàļ .kpz. À ţàšķ-šçöþéđ þŕöƒîļé öƒ ţĥé .kpz çöñţàîñéŕ (Ḿ-06): öñé šöüŕçé→ţàŕĝéţ þàîŕ, ţĥé ƃļöçķš ŵîţĥ ƒàîţĥƒüļ îñļîñé çöđéš, ţĥé šéĝḿéñţàţîöñ àñđ àļîĝñḿéñţ öṽéŕļàýš, ţĥé þéŕ-šöüŕçé šķéļéţöñ ƒöŕ ŕöüñđ-ţŕîþ, àñđ ţĥé ŕéļéṽàñţ ḿéḿöŕý-ḿàţçĥ àñđ ţéŕḿ çöñţéẋţ, îñ öñé ļöššļéšš, đéţéŕḿîñîšţîç, çöñţéñţ-àđđŕéššéđ ƒîļé. Šéļéçţéđ ŵîţĥ --format kpz. Îţ îš ļöššļéšš ŵĥéŕé ẊĻÎƑƑ îš ļöššý, çàŕŕîéš ḿéḿöŕý àñđ ţéŕḿ çöñţéẋţ îñļîñé ŕàţĥéŕ ţĥàñ àš šéþàŕàţé ŢḾẊ/ŢƂẊ àţţàçĥḿéñţš, àñđ, ƃéîñĝ Ḿéŕķļé-ĥàšĥàƃļé, ĝîṽéš îñţéĝŕîţý-ṽéŕîƒîéđ, đàƃļé ŕéṽîéŵ. Îţ îš éçöšýšţéḿ îñţéŕçĥàñĝé: ƃöţĥ éñđš ñééđ à neokapi ŕéàđéŕ. Ḿàķîñĝ îţ à çŕöšš-ṽéñđöŕ šţàñđàŕđ ŵöüļđ ƃé àñ öþéñ-šþéç àñđ šéçöñđ-îḿþļéḿéñţàţîöñ 郃öŕţ, ñöţ à þŕöþéŕţý öƒ ţĥé ƃýţéš.

Îñđüšţŕý îñţéŕöþ: ẊĻÎƑƑ 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'š ƃööķķééþîñĝ îñ đéṽéļöþéŕ çöḿḿéñţš (#. 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> éļéḿéñţš îš ţĥé öñé îţ çàññöţ đŕàŵ, àñđ ţĥàţ îš ŕéçöŕđéđ ŕàţĥéŕ ţĥàñ ĥàļƒ-đŕàŵñ.

Ƃļöçķ îš ţĥé ḿéŕĝé ķéý

Ţĥé ḿéŕĝé ķéý îš ţĥé ƃļöçķ çöñţéñţ ĥàšĥ (Ƒ-03), çöḿþüţéđ öṽéŕ ţĥé ñöŕḿàļîžéđ šöüŕçé ŕüñš. Šéĝḿéñţàţîöñ îš à šţàñđ-öƒƒ öṽéŕļàý öṽéŕ ţĥöšé ŕüñš (Ƒ-02), ñöţ à ŕéŵŕîţé öƒ ţĥéḿ, šö îţ ñéṽéŕ ḿöṽéš ţĥé ĥàšĥ: à ƃļöçķ'š îđéñţîţý îš šţàƃļé àçŕöšš à šéĝḿéñţàţîöñ ţöĝĝļé ƃéţŵééñ éẋţŕàçţîöñš.

Ţĥé ŕéàđéŕ-àššîĝñéđ îđ ƃéšîđé ţĥé ĥàšĥ îš ḿàđé üñîǫüé ŵĥéŕé îţ îš àššîĝñéđ. À çöñţàîñéŕ ǫüàļîƒîéš éàçĥ đéļéĝàţéđ ƃļöçķ ƃý ţĥé ḿéḿƃéŕ îţ çàḿé ƒŕöḿ (sf2_tu1, ţĥé šĥàþé üþšţŕéàḿ Okapi üšéš ƒöŕ à šüƃƒîļţéŕ), àñđ à đöçüḿéñţ ţĥàţ ŕéþéàţš à 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" id="batch-id">, àļöñĝšîđé ñöţéš ŕéçöŕđîñĝ ţĥé šöüŕçé þàţĥ àñđ ţĥé šöüŕçé ĥàšĥ àţ éẋţŕàçţ ţîḿé; ÞÖ çàŕŕîéš îţ àš à ƒîļé-ĥéàđéŕ éẋţŕàçţéđ çöḿḿéñţ (#. kapi-batch: <uuid>). Ţĥé šöüŕçé-þàţĥ ñöţé îš ţĥé ƒàļļƃàçķ ŵĥéñ à ƃàţçĥ îđ îš ḿîššîñĝ; ţĥé šöüŕçé-ĥàšĥ ñöţé îš ŵĥàţ šţàļé-šéĝḿéñţ đéţéçţîöñ çöḿþàŕéš àĝàîñšţ.

Šķéļéţöñš ļîṽé îñ þŕöĵéçţ šţàţé, šö ḿéŕĝé ñééđš ţĥé šàḿé þŕöĵéçţ ţĥàţ þŕöđüçéđ ţĥé éẋţŕàçţîöñ. Ţĥàţ ķééþš ţĥé éḿîţţéđ ẊĻÎƑƑ öŕ ÞÖ šḿàļļ àñđ ƒŕîéñđļý ţö à ţĥîŕđ-þàŕţý ţööļ, àñđ ķééþš ţĥé ḿéḿöŕý àƃšöŕƃ çĥéàþ. Ţĥé þŕöĵéçţ đîŕéçţöŕý îš àļŕéàđý ţĥé üñîţ öƒ þöŕţàƃîļîţý: git push šĥîþš îţ.

Ţĥé ḿéḿöŕý ļööþ

Öñ éẋţŕàçţ, kapi ǫüéŕîéš ţĥé þŕöĵéçţ'š çöñţéñţ ḿéḿöŕý ƒöŕ éṽéŕý šéĝḿéñţ îţ éḿîţš:

  • àñ éẋàçţ ḿàţçĥ þŕé-ƒîļļš <target> ŵîţĥ state="translated";
  • à ƒüžžý ḿàţçĥ àţ öŕ àƃöṽé ţĥé ŕéçîþé'š ţĥŕéšĥöļđ þŕé-ƒîļļš ŵîţĥ state="fuzzy" àñđ à ḿàţçĥ-ǫüàļîţý šüƃ-šţàţé;
  • àñ àḿƃîĝüöüš ḿàţçĥ (šéṽéŕàļ ƒüļļ-šçöŕé éẋàçţš ŵîţĥ đéŕîñĝ ţàŕĝéţš) îš ñéṽéŕ þŕé-ƒîļļéđ. Àñ üñàţţéñđéđ ḿéŕĝé ŵöüļđ ţüŕñ àñ àŕƃîţŕàŕý þîçķ îñţö þüƃļîšĥéđ çöñţéñţ; ļéƒţ éḿþţý, ţĥé šéĝḿéñţ šüŕƒàçéš àš üñţŕàñšļàţéđ ƒöŕ à ĥüḿàñ ţö šéţţļé.

--no-memory ţüŕñš ţĥé þŕé-ƒîļļ öƒƒ.

Öñ ḿéŕĝé, éṽéŕý àççéþţéđ ţàŕĝéţ šéĝḿéñţ îš ŵŕîţţéñ îñţö ţĥé þŕöĵéçţ'š çöñţéñţ ḿéḿöŕý ŵîţĥ þŕöṽéñàñçé: öŕîĝîñ šöüŕçé merge, ţĥé ƃàţçĥ îđ àš ţĥé ŕéƒéŕéñçé, ţĥé šöüŕçé ƒîļé þàţĥ àš ţĥé ķéý, àñđ ţĥé ƃļöçķ ĥàšĥ àñđ öŕîĝîñàţîñĝ ƒîļéñàḿé àš þŕöþéŕţîéš. --no-memory-update ţüŕñš ţĥé ŵŕîţé-ƃàçķ öƒƒ.

Ƃöţĥ ĥàļṽéš àŕé öñ ƃý đéƒàüļţ ƃéçàüšé ţĥé ļööþ îš ţĥé ḿéçĥàñîšḿ: ŵîţĥöüţ ţĥé ŵŕîţé-ƃàçķ, ļéṽéŕàĝé đéçàýš ţö žéŕö, àñđ ḿàķîñĝ îţ öþţ-îñ ŵöüļđ ļéàṽé ḿöšţ þŕöĵéçţš' ḿéḿöŕîéš éḿþţý. Ŕéàđ-öñļý ḿéḿöŕîéš îḿþöŕţéđ îñţö à þŕöĵéçţ àŕé ñéṽéŕ ŵŕîţţéñ ţö, šö îḿþöŕţéđ ŢḾẊ šţàýš ŕéþŕöđüçîƃļé ƒŕöḿ îţš šöüŕçé ƒîļé.

Çöñƒļîçţ þöļîçý àñđ šţàļé šéĝḿéñţš

defaults.merge.conflict_policy ĝöṽéŕñš ţŵö đéçîšîöñš àţ öñçé: àþþļýîñĝ à ţŕàñšļàţöŕ'š ţàŕĝéţ ŵĥéñ àñ éẋîšţîñĝ ţàŕĝéţ îš àļŕéàđý öñ đîšķ, àñđ ŵŕîţîñĝ ƃàçķ ţö ţĥé ḿéḿöŕý ŵĥéñ àñ éñţŕý àļŕéàđý çàŕŕîéš à ţŕàñšļàţîöñ:

  • translator-wins (đéƒàüļţ): ţĥé ŕéţüŕñéđ ţàŕĝéţ ŕéþļàçéš ŵĥàţ îš ţĥéŕé.
  • existing-wins: ţĥé éẋîšţîñĝ ţàŕĝéţ îš þŕéšéŕṽéđ àñđ ţĥé ŕéţüŕñéđ öñé îš šķîþþéđ ŵîţĥ à ŵàŕñîñĝ.
  • newest-wins: çöḿþàŕé ţîḿéšţàḿþš (ƒîļé ḿöđîƒîçàţîöñ ţîḿé, éñţŕý üþđàţé ţîḿé) àñđ ţàķé ţĥé ñéŵéŕ.

Ţĥéŕé îš ñö îñţéŕàçţîṽé þŕöḿþţ, šö ḿéŕĝé šţàýš šçŕîþţàƃļé îñ ÇÎ.

Ḿéŕĝé đéţéçţš šţàļé šéĝḿéñţš ƃý çöḿþàŕîñĝ ţĥé šöüŕçé ĥàšĥ ŕéçöŕđéđ àţ éẋţŕàçţ ţîḿé àĝàîñšţ ţĥé çüŕŕéñţ šöüŕçé. À šţàļé šéĝḿéñţ îš ŕéþöŕţéđ, ñöţ šîļéñţļý àþþļîéđ, àñđ ñöţ àƃšöŕƃéđ îñţö ţĥé ḿéḿöŕý éṽéñ üñđéŕ à þöļîçý ţĥàţ ŵöüļđ öţĥéŕŵîšé àççéþţ îţ. Þàŕţîàļ ŕéţüŕñš àŕé öŕđîñàŕý: ḿéŕĝé ƒîñđš ţĥé ḿàñîƒéšţ ƃý ƃàţçĥ îđ àñđ àþþļîéš ţĥé ţŕàñšļàţéđ šéĝḿéñţš, ļéàṽîñĝ ţĥé ŕéšţ àļöñé.

Ŕéçîþé šüŕƒàçé

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

Üñķñöŵñ ƒîéļđš àŕé ŕéĵéçţéđ ŵîţĥ à çļéàŕ éŕŕöŕ àñđ éñüḿ ṽàļüéš àŕé ṽàļîđàţéđ àĝàîñšţ ţĥé àļļöŵéđ šéţ. Éàçĥ šéçţîöñ'š đéƒàüļţš àþþļý ŵĥéñ îţ îš àƃšéñţ.

Ŕéļàţéđ