Ĥàñđ öƒƒ ţö ţŕàñšļàţöŕš
:::îñƒö Ţĥé ẊĻÎƑƑ/ÞÖ ĥàñđ-öƒƒ ñééđš à þŕöĵéçţ
kapi extract àñđ kapi merge ŕéàđ ţĥé ŕéçîþé'š çöñţéñţ ĝļöƃš àñđ ţàŕĝéţ
ļöçàļéš àñđ üšé ţĥé þŕöĵéçţ'š çöñţéñţ ḿéḿöŕý þļüš ţĥé éẋţŕàçţîöñ ƃööķķééþîñĝ kapi
ŕéçöŕđš, šö ƒöŕ ţĥé ẊĻÎƑƑ öŕ ÞÖ ĥàñđ-öƒƒ šţàŕţ ŵîţĥ kapi init àñđ ŕüñ ţĥéḿ
îñšîđé ţĥé þŕöĵéçţ. Ţĥé .kpz ŵöŕķšþàçé ŕüñš àđ ĥöç
(kapi extract src/*.json -o work.kpz), àñđ àđ-ĥöç öñé-ŵàý ƒöŕḿàţ
çöñṽéŕšîöñ îš þļàîñ kapi run -i <file>.
:::
kapi çàñ ţŕàñšļàţé ýöüŕ çöñţéñţ öñ îţš öŵñ. Ƃüţ ŵĥéñ à þéŕšöñ šĥöüļđ đö ţĥé ţŕàñšļàţîöñ (à þŕöƒéššîöñàļ ţŕàñšļàţöŕ, à ñàţîṽé-šþéàķîñĝ çöļļéàĝüé, àñ öüţšîđé àĝéñçý) ýöü ĥàñđ ţĥé ŵöŕķ öüţ àñđ ţàķé îţ ƃàçķ: kapi þŕöđüçéš à ƒîļé ţĥé ţŕàñšļàţöŕ öþéñš îñ ŵĥàţéṽéŕ ţööļ ţĥéý àļŕéàđý üšé, àççéþţš ţĥé ŕéţüŕñéđ ṽéŕšîöñ, àñđ ŕéƃüîļđš ýöüŕ öŕîĝîñàļ ƒîļéš ƃýţé-ƒöŕ-ƃýţé. Îţ îš àñ éšçàþé ĥàţçĥ ƃéšîđé ţĥé ñöŕḿàļ þàţĥ, àñđ ţĥé çöŕŕéçţîöñš ţĥàţ çöḿé ƃàçķ àŕé çàþţüŕéđ šö ţĥéý çàŕŕý îñţö ţĥé ñéẋţ ŕüñ. Ƒöŕ ţĥé ḿéḿöŕý ḿöđéļ ƃéĥîñđ îţ (ḿàţçĥîñĝ, ƒüžžý ţĥŕéšĥöļđš, þŕé-ƒîļļ/àƃšöŕƃ), šéé Çöñţéñţ ḿéḿöŕý.
Ţŵö çàŕŕîéŕš, çĥöšéñ ƃý ŕéçîþîéñţ. Ţĥé ñàţîṽé îñţéŕçĥàñĝé ƒöŕḿàţ îš ţĥé
ļöššļéšš ƃîļîñĝüàļ .kpz (kapi extract --format kpz), ƒöŕ à ŕéçîþîéñţ
ŵöŕķîñĝ îñ kapi öŕ ţĥé neokapi ŕéṽîéŵ ţööļ; îţ çàŕŕîéš îñļîñé çöđéš, ḿéḿöŕý
ḿàţçĥéš, àñđ ţéŕḿ çöñţéẋţ îñ öñé îñţéĝŕîţý-ṽéŕîƒîéđ, đàƃļé þàŕçéļ. Ƒöŕ à
ţĥîŕđ-þàŕţý ÇÀŢ ţööļ, kapi extract éḿîţš ẊĻÎƑƑ 2.ẋ / ÞÖ (ţĥé đéƒàüļţ), ţĥé
îñţéŕöþ ţîéŕ ţĥîš þàĝé ƒöçüšéš öñ. Ƃöţĥ ĝö öüţ àñđ çöḿé ƃàçķ ţĥŕöüĝĥ ţĥé šàḿé
extract / merge ṽéŕƃš; šéé KBF ṽš ẊĻÎƑƑ. (Ḿéḿöŕý
àñđ ţéŕḿîñöļöĝý ĥàṽé ţĥéîŕ öŵñ îñţéŕçĥàñĝé: kapi memory import/export ƒöŕ ŢḾẊ,
kapi terms import/export ƒöŕ ŢƂẊ.)
The narration uses terminology that has since been retired. The interface and the behaviour shown are unchanged.
Çöñţéñţ ḿéḿöŕý îñ ţĥé ļööþ
Ţĥé çöñţéñţ ḿéḿöŕý þàŕţîçîþàţéš öñ ƃöţĥ šîđéš öƒ ţĥé ŕöüñđ-ţŕîþ:
- Ḿéḿöŕý þŕé-ƒîļļ öñ éẋţŕàçţ: éṽéŕý šéĝḿéñţ îš ļööķéđ üþ àĝàîñšţ ţĥé
þŕöĵéçţ'š ḿéḿöŕý ƒîŕšţ. Éẋàçţ ḿàţçĥéš ļàñđ þŕé-ƒîļļéđ àš
state="translated"; ƒüžžý ḿàţçĥéš àƃöṽé ţĥé ŕéçîþé'šmemory.fuzzy_thresholdļàñđ àš ƒüžžý. - Ḿéḿöŕý àƃšöŕƃ öñ ḿéŕĝé: éṽéŕý àççéþţéđ ţàŕĝéţ ƃéçöḿéš àñ éñţŕý îñ ţĥé
þŕöĵéçţ'š ḿéḿöŕý, ŵîţĥ þŕöṽéñàñçé (ƃàţçĥ îđ, šöüŕçé þàţĥ, çöñţéñţ ĥàšĥ,
ƒîļéñàḿé) ţĥàţ
kapi memory audit --batch <id>çàñ ţŕàçé ƃàçķ ļàţéŕ.
Ƃöţĥ àŕé öñ ƃý đéƒàüļţ; --no-memory àñđ --no-memory-update đîšàƃļé ţĥéḿ. Àƃšöŕƃ îš
ŕéçýçļé ļéṽéŕàĝé àñđ ñéṽéŕ à ŕéṽîéŵ đéçîšîöñ: ŵĥéţĥéŕ à ŕéṽîéŵéŕ àþþŕöṽéđ à
ţàŕĝéţ îš à šéþàŕàţé, çöñţéñţ-ĥàšĥ-ƃöüñđ ƒàçţ ŕéçöŕđéđ îñ ţĥé þŕöĵéçţ
šţàţé šţöŕé ƃý kapi apply (kind:"review"); ţĥé
çöñţéñţ ḿéḿöŕý ĥöļđš ñöñé öƒ îţ.
Ŕüñ ţĥé éñĝîñé ƃéĥîñđ ţĥé ŕöüñđ-ţŕîþ ýöüŕšéļƒ: þîçķ ţĥé ƃîļîñĝüàļ ẊĻÎƑƑ šàḿþļé,
ŕüñ îţ ţĥŕöüĝĥ, àñđ çöḿþàŕé šöüŕçé ŵîţĥ öüţþüţ; ţĥé šàḿé ŕéàđéŕ àñđ ŵŕîţéŕ ƃàçķ
kapi extract àñđ kapi merge:
Ţĥé kapi.ýàḿļ ŕéçîþé
# kapi.yaml
version: v1
name: My App
defaults:
source_language: en-US
target_languages: [fr-FR, de-DE, es-ES]
merge:
conflict_policy: translator-wins # | existing-wins | newest-wins
memory:
fuzzy_threshold: 75 # percent; 0..100
collections:
- path: src/locales/en/*.json
target: src/locales/{lang}
Ţĥé merge, memory, àñđ (öþţ-îñ) segmentation šéçţîöñš àŕé öþţîöñàļ; đéţàîļš öñ
ţĥé þŕöĵéçţ ƒîļé ŕéƒéŕéñçé. Šééđ ţĥé ḿéḿöŕý ƒŕöḿ àñ
éẋîšţîñĝ çöŕþüš îƒ ýöü ĥàṽé öñé: kapi memory import ./corporate-en-fr.memory.json.
Éẋţŕàçţ
Ƒŕöḿ îñšîđé ţĥé þŕöĵéçţ (àüţö-đîšçöṽéŕéđ ƒŕöḿ çŵđ, ĝîţ-šţýļé), kapi extract
ŵŕîţéš öñé ẊĻÎƑƑ 2.2 þéŕ šöüŕçé → ţàŕĝéţ þàîŕ üñđéŕ out/, ŕéçöŕđš ţĥé
çàþţüŕéđ šķéļéţöñš àñđ à ḿàñîƒéšţ îñ ţĥé þŕöĵéçţ'š ĝîţîĝñöŕéđ çàçĥé šö ḿéŕĝé
çàñ ŕéƃüîļđ ţĥé šöüŕçé ƃýţé-ƒöŕ-ƃýţé, àñđ šţàḿþš éàçĥ ƒîļé ŵîţĥ à
<note category="kapi"> çàŕŕýîñĝ ţĥé ƃàţçĥ îđ, šöüŕçé ƒîļé, àñđ šöüŕçé ĥàšĥ:
kapi extract
Extracting batch 6f2e8a1c (format=xliff2, targets=fr-FR, de-DE, es-ES, sources=1)
LOCALE FILES BLOCKS EXACT FUZZY NEW
fr-FR 1 412 108 67 237
de-DE 1 412 0 0 412
es-ES 1 412 0 0 412
Batch 6f2e8a1c complete. Manifest: .kapi/work/cache/extractions/6f2e8a1c/manifest.yaml
Aggregate content-memory leverage: exact=108 fuzzy=67 new=1061 (total=1236)
Ḿüļţî-ţàŕĝéţ îñ öñé þàšš îš ţĥé đéƒàüļţ. Çöḿḿöñ öþţîöñš: --target-lang fr,de
(šüƃšéţ), --only <collection>, --pattern <glob>, --xliff-version 2.0,
--no-memory, --out-dir <dir>, àñđ --redact-rules: ŕéđàçţéđ éẋţŕàçţîöñ šĥîþš
þļàçéĥöļđéŕš öñļý àñđ kapi merge ŕéšţöŕéš ţĥé öŕîĝîñàļš ƒŕöḿ ţĥé ļöçàļ ṽàüļţ
(šéé Ŕéđàçţîöñ).
Ţĥé ţŕàñšļàţöŕ þĥàšé îš öüţ öƒ šçöþé ƒöŕ kapi: àñý ƃîļîñĝüàļ ţööļ ţĥàţ šþéàķš ẊĻÎƑƑ 2.ẋ ŵöŕķš, àñđ kapi îš éñţîŕéļý öüţ öƒ ţĥé ļööþ üñţîļ ţĥé ƒîļé ŕéţüŕñš.
Ḿéŕĝé ţĥé ŕéţüŕñ
kapi merge -i vendor-return/app.en-US-to-fr-FR.xliff
kapi merge -i vendor-return/ # every .xliff in the directory; -i repeats
Ḿéŕĝé ƒîñđš ţĥé ŕîĝĥţ ƃàţçĥ ƃý ţĥé éḿƃéđđéđ ƃàţçĥ-îđ ñöţé, šö ŕéñàḿéđ ƒîļéš šţîļļ ḿéŕĝé. Éàçĥ îñþüţ îš àþþļîéđ îñđéþéñđéñţļý: à ƒàîļüŕé öñ öñé (þàŕšé éŕŕöŕ, ḿîššîñĝ ḿàñîƒéšţ, šţàļé šöüŕçé) đöéšñ'ţ àƃöŕţ ţĥé öţĥéŕš; þéŕ-ƒîļé öüţçöḿéš àŕé ŕéþöŕţéđ àñđ ţĥé éẋîţ çöđé ŕéƒļéçţš àñý ƒàîļüŕé.
- Šţàļé šéĝḿéñţš. À ƃļöçķ ŵĥöšé
<source>đŕîƒţéđ šîñçé éẋţŕàçţ (šöḿéöñé éđîţéđ ţĥé ƒîļé ŵĥîļé îţ ŵàš öüţ) îš ŕéþöŕţéđ šţàļé àñđ šķîþþéđ, ñéîţĥéŕ àþþļîéđ ñöŕ àƃšöŕƃéđ îñţö ḿéḿöŕý. Ŕé-éẋţŕàçţ àñđ ŕé-ţŕàñšļàţé ţĥé đŕîƒţéđ þöŕţîöñ. - Çöñƒļîçţš. Ŵĥéñ à ţàŕĝéţ àļŕéàđý éẋîšţš,
merge.conflict_policyđéçîđéš:translator-wins(đéƒàüļţ),existing-wins, öŕnewest-wins(ƃý ţîḿéšţàḿþ); ţĥé šàḿé þöļîçý ĝöṽéŕñš ḿéḿöŕý ŵŕîţé-ƃàçķ. Ñéṽéŕ îñţéŕàçţîṽé. - Àüđîţ.
kapi memory audit --batch <merge-batch-id>ļîšţš éṽéŕý éñţŕý ţĥé ḿéŕĝé ŵŕöţé, ŵîţĥ þŕöṽéñàñçé.
Àƒţéŕ à ḿéŕĝé, ţĥé ĝàţéš šàý ŵĥéŕé ýöü šţàñđ: kapi status ŕé-đéŕîṽéš çöṽéŕàĝé
ƒŕöḿ ţĥé ḿéŕĝéđ ţàŕĝéţš, àñđ kapi check --ship éñƒöŕçéš ţĥé šĥîþ ĝàţé ƃéƒöŕé à
ŕéļéàšé; šéé ţĥé kapi ļööþ.
ÞÖ (ĝéţţéẋţ) àļţéŕñàţîṽé
Šàḿé ƒļöŵ, đéŕéñţ éẋçĥàñĝé ƒöŕḿàţ: kapi extract --format po, ţĥéñ
kapi merge -i …/*.po: öñé éñţŕý þéŕ ƃļöçķ, kapi'š ƃööķķééþîñĝ àš éẋţŕàçţéđ
çöḿḿéñţš (#. kapi-batch:, #. kapi-block:), #, fuzzy öñ ƒüžžý ḿéḿöŕý þŕé-ƒîļļš.
À šîñĝļé ḿéŕĝé îñṽöçàţîöñ çàñ ḿîẋ ẊĻÎƑƑ àñđ ÞÖ ƒŕöḿ ţĥé šàḿé ƃàţçĥ. ÞÖ çàññöţ
çàŕŕý šéñţéñçé-ļéṽéļ šéĝḿéñţàţîöñ; þŕöĵéçţš ŵîţĥ segmentation.source: true
ḿüšţ éḿîţ ẊĻÎƑƑ (ţĥé çöḿƃîñàţîöñ éŕŕöŕš éàŕļý).
Ŵĥàţ šţàýš îñ ţĥé þŕöĵéçţ
Ţĥé ƃîļîñĝüàļ ƒîļé çàŕŕîéš öñé çĥöšéñ ţàŕĝéţ þéŕ ļàñĝüàĝé, ţĥé šöüŕçé ŕüñš àñđ îñļîñé çöđéš, àñđ, ŵîţĥ ţĥé çàþţüŕéđ šķéļéţöñ, éñöüĝĥ ţö ŕéƃüîļđ ţĥé öŕîĝîñàļ ƃýţé-ƒöŕ-ƃýţé. Éṽéŕýţĥîñĝ éļšé šţàýš îñ þŕöĵéçţ šţàţé: ţĥé çöñţéñţ ḿéḿöŕý, ţĥé ţéŕḿš šţöŕé, àñđ ţĥé šţàñđ-öƒƒ öṽéŕļàýš, ṽàŕîàñţš, àñđ þéŕ-ţàŕĝéţ šţàţüš ţĥé çöñţéñţ ḿöđéļ ŕéçöŕđš. Ţĥé ƃîļîñĝüàļ ƒîļé îš ţĥé ļéàñ, ţööļ-ñéüţŕàļ ĥàñđöƒƒ; ţĥé þŕöĵéçţ îš ţĥé šýšţéḿ öƒ ŕéçöŕđ, ŵĥîçĥ îš ŵĥý ḿéŕĝé ñééđš ţĥé šàḿé þŕöĵéçţ ţĥé éẋţŕàçţ ŕàñ îñ.
Ŕéļàţéđ
- KBF ṽš ẊĻÎƑƑ: ŵĥéñ ţö üšé éàçĥ îñţéŕçĥàñĝé ƒöŕḿàţ.
- Þŕé-ţŕàñšļàţé ƒŕöḿ ḿéḿöŕý: ļéṽéŕàĝé éẋîšţîñĝ ţŕàñšļàţîöñš ƃéƒöŕé šéñđîñĝ àñýţĥîñĝ öüţ.
- Çöḿḿàñđ ŕéƒéŕéñçé: éṽéŕý çöḿḿàñđ àñđ ƒļàĝ.