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

Ĥàñđ öƒƒ ţö ţŕàñšļàţöŕš

:::îñƒö Ţĥé ẊĻÎƑƑ/ÞÖ ĥàñđ-öƒƒ ñééđš à þŕöĵéçţ 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 ƒöŕ ŢƂẊ.)

Outdated wording

The narration uses terminology that has since been retired. The interface and the behaviour shown are unchanged.

Çöñţéñţ ḿéḿöŕý îñ ţĥé ļööþ

Ţĥé çöñţéñţ ḿéḿöŕý þàŕţîçîþàţéš öñ ƃöţĥ šîđéš öƒ ţĥé ŕöüñđ-ţŕîþ:

pre-fillabsorbauthored sourcekapi extractXLIFF / POtranslatorkapi mergetranslated XLIFF / POreturned by translatorproject memory
  • Ḿéḿöŕý þŕé-ƒîļļ öñ éẋţŕàçţ: éṽéŕý šéĝḿéñţ îš ļööķéđ üþ àĝàîñšţ ţĥé þŕöĵéçţ'š ḿéḿöŕý ƒîŕšţ. Éẋàçţ ḿàţçĥéš ļàñđ þŕé-ƒîļļéđ àš 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 ḿüšţ éḿîţ ẊĻÎƑƑ (ţĥé çöḿƃîñàţîöñ éŕŕöŕš éàŕļý).

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

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

Ŕéļàţéđ