Þŕöĵéçţ ƒîļé
À kapi þŕöĵéçţ îš à þöŕţàƃļé kapi.yaml ŕéçîþé àţ à þŕöĵéçţ'š ŕööţ ţĥàţ çàþţüŕéš à çöñţéñţ ŵöŕķƒļöŵ: ŵĥîçĥ ƒîļéš çöüñţ àš çöñţéñţ, ţĥé ṽöîçé þŕöƒîļé, ţéŕḿš àñđ çööŕđîñàţéš ţĥàţ ĝöṽéŕñ ţĥéḿ, šöüŕçé àñđ ţàŕĝéţ ļàñĝüàĝéš, ţööļ þîþéļîñéš (ƒļöŵš), þļüĝîñ ŕéǫüîŕéḿéñţš, àñđ þŕöçéššîñĝ đéƒàüļţš. Îţ çàŕŕîéš ñö çŕéđéñţîàļš öŕ šţàţé, šö îţ îš àļŵàýš šàƒé ţö çöḿḿîţ. Ƒöŕ ŵĥéñ ţö üšé à þŕöĵéçţ ṽéŕšüš àñ àđ-ĥöç ŕüñ, šéé Þŕöĵéçţš.
Đîšçöṽéŕý
Ļîķé ĝîţ, kapi ŵàļķš üþ ţĥé đîŕéçţöŕý ţŕéé ƒŕöḿ ŵĥéŕé ýöü ŕüñ îţ àñđ üšéš ţĥé ñéàŕéšţ kapi.yaml ŕéçîþé, ŕüññîñĝ îñ þŕöĵéçţ ḿöđé ŵîţĥ ţĥàţ þŕöĵéçţ'š ļàñĝüàĝéš, đéƒàüļţš, àñđ ƒļöŵš. À đîŕéçţöŕý ĥöļđš àţ ḿöšţ öñé kapi.yaml, šö đîšçöṽéŕý îš üñàḿƃîĝüöüš. Àñ éẋþļîçîţ -p <path> öṽéŕŕîđéš đîšçöṽéŕý, àñđ KAPI_NO_PROJECT=1 đîšàƃļéš îţ šö ţĥé ÇĻÎ ŕüñš àđ-ĥöç.
Ƒöŕḿàţ
version: v1
id: prj_k3m7xq2vw9ta5r8ybn4dcp
name: My App
collections:
- path: "src/locales/en/*.json"
target: "src/locales/{lang}" # mirror each matched file under the per-language dir
preset: nextjs
plugins:
okapi: "^1.47.0"
flows:
translate:
steps:
- tool: translate
config:
provider: anthropic
model: <provider-model-id>
translate-and-qa:
steps:
- tool: translate
config:
provider: anthropic
- tool: qa
pseudo:
steps:
- tool: pseudo-translate
config:
expansionPercent: 30
defaults:
source_language: en
target_languages:
- fr
- de
- ja
concurrency: 4
parallel_blocks: 3
encoding: utf-8
exclude:
- "**/*.generated.json"
merge:
conflict_policy: translator-wins
memory:
fuzzy_threshold: 75
segmentation:
source: true
terms_source: .kapi/terms.json
memory_source: .kapi/memory/memory.json
Ƒîéļđš
Ŕéǫüîŕéđ
| Ƒîéļđ | Ţýþé | Đéšçŕîþţîöñ |
|---|---|---|
version | šţŕîñĝ | Šçĥéḿà ṽéŕšîöñ, ḿüšţ ƃé "v1" |
name | šţŕîñĝ | Þŕöĵéçţ đîšþļàý ñàḿé |
Öþţîöñàļ
| Ƒîéļđ | Ţýþé | Đéšçŕîþţîöñ |
|---|---|---|
id | šţŕîñĝ | Ţĥé þŕöĵéçţ'š šţàƃļé îđéñţîţý (šéé Þŕöĵéçţ îđéñţîţý) |
collections | Çöļļéçţîöñ[] | Ţĥé çöñţéñţ ţĥîš þŕöĵéçţ ĝöṽéŕñš (šéé Çöļļéçţîöñš) |
profiles | ḿàþ | Ĝöṽéŕñàñçé ƃöüñđ þéŕ þŕöđüçţ, ķéýéđ ƃý þŕöƒîļé ñàḿé (šéé Þŕöƒîļéš àñđ çĥàññéļš) |
preset | šţŕîñĝ | À ƒŕàḿéŵöŕķ þŕéšéţ ñàḿé (šéé kapi init --list-presets) (é.ĝ., nextjs, react-intl) àþþļîéđ ţö ƒöŕḿàţš |
plugins | ḿàþ | Þļüĝîñ ŕéǫüîŕéḿéñţš ķéýéđ ƃý ñàḿé (é.ĝ., okapi: "^1.47.0") |
requires | ḿàþ | Þļüĝîñ ñàḿé → šéḿṽéŕ çöñšţŕàîñţ ţĥàţ ĝàţéš ļöàđîñĝ; ţĥé ŕéçîþé ŕéƒüšéš ţö ļöàđ ŵîţĥöüţ à ŕéĝîšţéŕéđ þļüĝîñ |
flows | ḿàþ | Ñàḿéđ ƒļöŵ đéƒîñîţîöñš (šéé Ƒļöŵ Šţéþš) |
defaults | Đéƒàüļţš | Þŕöçéššîñĝ đéƒàüļţš (šéé Đéƒàüļţš; šöüŕçé/ţàŕĝéţ ļàñĝüàĝéš ļîṽé ĥéŕé) |
ship_gate | Ĝàţé | À šîñĝļé çàţçĥ-àļļ šĥîþ ĝàţé (šéé Šĥîþ ĝàţéš) |
ship_gates | ŠĥîþĜàţéŔüļé[] | Šçöþéđ šĥîþ-ĝàţé ŕüļéš; ţĥé ḿöšţ šþéçîƒîç ḿàţçĥîñĝ ŕüļé ŵîñš (šéé Šĥîþ ĝàţéš) |
gates | ḿàþ | Ñàḿéđ ĝàţé ŕéĝîšţŕý à ship_gates ŕüļé çàñ ŕéƒéŕéñçé ƃý ñàḿé (šéé Šĥîþ ĝàţéš) |
source_gate | Ĝàţé | Çöṽéŕàĝé ĝàţé öṽéŕ ţĥé šöüŕçé àüţĥöŕîñĝ ļàđđéŕ (šéé šöüŕçé_ĝàţé) |
verified_gate | Ĝàţé | À šîñĝļé çàţçĥ-àļļ ṽéŕîƒîéđ ĝàţé: ţĥé ƃàŕ à ļöçàļé ḿüšţ çļéàŕ ţö ŕéàđ àš ṽéŕîƒîéđ, îñđéþéñđéñţ öƒ šĥîþþîñĝ (šéé Šĥîþ ĝàţéš) |
verified_gates | ŠĥîþĜàţéŔüļé[] | Šçöþéđ ṽéŕîƒîéđ-ĝàţé ŕüļéš, îñ ţĥé šàḿé when/gate ƒöŕḿ àš ship_gates; ţĥé ḿöšţ šþéçîƒîç ŕüļé ŵîñš. Ŵîţĥ ñéîţĥéŕ ķéý šéţ, ñö ļöçàļé îš ṽéŕîƒîéđ |
Þŕöĵéçţ îđéñţîţý
kapi init ŵŕîţéš àñ id: îñţö éṽéŕý ŕéçîþé îţ šçàƒƒöļđš:
version: v1
id: prj_k3m7xq2vw9ta5r8ybn4dcp
name: My App
Ţĥé îđ îš ŕàñđöḿ, ḿîñţéđ öñçé, àñđ đéŕîṽéđ ƒŕöḿ ñöţĥîñĝ éļšé îñ ţĥé þŕöĵéçţ. Éṽéŕýţĥîñĝ kapi ŕéçöŕđš àƃöüţ ţĥé þŕöĵéçţ ļöçàļļý îš ķéýéđ öñ îţ, šö ýöü çàñ ŕéñàḿé ţĥé þŕöĵéçţ, ḿöṽé ţĥé ƒöļđéŕ, öŕ çļöñé ţĥé ŕéþöšîţöŕý öñţö àñöţĥéŕ ḿàçĥîñé àñđ ţĥé ŕéçöŕđéđ çöñţéẋţ šţîļļ ƃéļöñĝš ţö ţĥé šàḿé þŕöĵéçţ. Ţŵö çĥéçķöüţš öƒ öñé ŕéþöšîţöŕý àŕé öñé þŕöĵéçţ ƃéçàüšé ţĥéý šĥàŕé öñé ŕéçîþé.
name: îš ţĥé ļàƃéļ ýöü ŕéàđ îñ kapi status àñđ îñ Kapi Đéšķţöþ. Çĥàñĝé îţ ŵĥéñéṽéŕ ýöü ļîķé.
Ķééþ ţĥé id: ļîñé ŵĥéñ ýöü çöḿḿîţ ţĥé ŕéçîþé, àñđ ķééþ îţ ŵĥéñ ýöü çöþý à ŕéçîþé àš à šţàŕţîñĝ þöîñţ ƒöŕ à ĝéñüîñéļý đéŕéñţ þŕöĵéçţ: đéļéţé ţĥé ļîñé ţĥéŕé àñđ ŕüñ kapi init --mint-id îñ ţĥé ñéŵ þŕöĵéçţ, ŵĥîçĥ ŵŕîţéš à ƒŕéšĥ îđ àñđ ļéàṽéš ţĥé ŕéšţ öƒ ţĥé ƒîļé üñţöüçĥéđ.
À ŕéçîþé ŵîţĥ ñö id: ķééþš ŵöŕķîñĝ. kapi îđéñţîƒîéš šüçĥ à þŕöĵéçţ ƃý îţš name:, àñđ kapi init --mint-id ĝîṽéš îţ àñ îđ ŵĥéñéṽéŕ ýöü ŵàñţ öñé.
Öļđéŕ kapi ŕéļéàšéš ŕéàđ à ŕéçîþé çàŕŕýîñĝ àñ id: ŵîţĥöüţ çöḿþļàîñţ: àñ üñŕéçöĝñîžéđ ţöþ-ļéṽéļ ķéý ŕöüñđ-ţŕîþš àš àñ éẋţéñšîöñ. Šüçĥ à ŕéļéàšé šţîļļ îđéñţîƒîéš ţĥé þŕöĵéçţ ƃý îţš ñàḿé, šö à þŕöĵéçţ šĥàŕéđ ƃéţŵééñ ţŵö kapi ṽéŕšîöñš îš ķéýéđ đéŕéñţļý ƃý éàçĥ üñţîļ ƃöţĥ çàŕŕý ţĥîš ŕéļéàšé.
Çöļļéçţîöñš
collections îš à ļîšţ. Éàçĥ éñţŕý îš éîţĥéŕ à ƃàŕé éñţŕý (öñé ĝļöƃ àñđ îţš
ţàŕĝéţ, ŵŕîţţéñ îñļîñé) öŕ à ñàḿéđ çöļļéçţîöñ, ŵĥîçĥ ĝŕöüþš çöñţéñţ îţéḿš
üñđéŕ à ñàḿé àñđ çàñ ƃîñđ ţĥéḿ ţö à þöîñţ îñ ţĥé þŕöĵéçţ'š çöñţéẋţ šþàçé.
collections:
# Bare entry: a pattern and where it lands.
- path: "src/locales/en/*.json"
target: "src/locales/{lang}"
# Named collection: a name, the directory it lives in, its items.
- name: docs
channel: sdk/docs
base: web
content:
- path: "docs/**/*.mdx"
target: "i18n/{lang}/{path}.mdx"
| Ƒîéļđ | Ţýþé | Đéšçŕîþţîöñ |
|---|---|---|
name | šţŕîñĝ | Çöļļéçţîöñ ñàḿé. Ŕéǫüîŕéđ ţö ƃîñđ à channel:, àñđ ŵĥàţ à šĥîþ-ĝàţé ŕüļé'š collections: šéļéçţöŕ ḿàţçĥéš |
base | šţŕîñĝ | Ţĥé đîŕéçţöŕý ţĥîš çöļļéçţîöñ ļîṽéš îñ; éṽéŕý path, target àñđ îţéḿ base ƃéļöŵ îš ŵŕîţţéñ ŕéļàţîṽé ţö îţ |
channel | šţŕîñĝ | Ţĥé þöîñţ îñ ţĥé çöñţéẋţ šþàçé ţĥîš çöļļéçţîöñ'š çöñţéñţ šîţš àţ, àļŵàýš profile/channel (šéé Þŕöƒîļéš àñđ çĥàññéļš) |
coordinates | ḿàþ | Đéçļàŕéđ àẋéš (brand, mode) ţĥé çöļļéçţîöñ šîţš àţ, öṽéŕļàîđ þéŕ àẋîš öñ defaults.coordinates; þŕöđüçţ àñđ çĥàññéļ çöḿé ƒŕöḿ channel: àñđ àŕé ŕéĵéçţéđ ĥéŕé (šéé Đéçļàŕéđ àẋéš) |
content | ÇöñţéñţÎţéḿ[] | Ţĥé çöļļéçţîöñ'š çöñţéñţ îţéḿš |
source_language | šţŕîñĝ | Öṽéŕŕîđéš defaults.source_language ƒöŕ ţĥîš çöļļéçţîöñ |
target_languages | šţŕîñĝ[] | Öṽéŕŕîđéš defaults.target_languages ƒöŕ ţĥîš çöļļéçţîöñ |
source_only | ƃööļ | Ţĥé çöļļéçţîöñ ĥàš ñö ţàŕĝéţ ļàñĝüàĝé: kapi up šķîþš îţ àñđ ţàŕĝéţ-çöṽéŕàĝé ĝàţéš éẋçļüđé îţ. Ŕéĵéçţéđ îƒ ţĥé çöļļéçţîöñ öŕ àñý îţéḿ àļšö çàŕŕîéš à ţàŕĝéţ |
path | šţŕîñĝ | Ƃàŕé éñţŕîéš öñļý: ţĥé ĝļöƃ, ŵŕîţţéñ îñšţéàđ öƒ content: |
format | šţŕîñĝ öŕ ḿàþ | Ƃàŕé éñţŕîéš öñļý |
target | šţŕîñĝ | Ƃàŕé éñţŕîéš öñļý |
À ñàḿéđ çöļļéçţîöñ ñééđš àţ ļéàšţ öñé îţéḿ üñđéŕ content: àñđ çàññöţ àļšö
çàŕŕý à path:; à ƃàŕé éñţŕý ñééđš à path:.
Šéţ source_only: true öñ çöñţéñţ kapi ŕéàđš ƃüţ ñéṽéŕ ŵŕîţéš, šüçĥ àš þàçķàĝé
đéšçŕîþţîöñš àñđ îñšţàļļéŕ šţŕîñĝš. Ţĥé ƒļàĝ çĥàñĝéš ñö ƃéĥàṽîöüŕ öñ îţš öŵñ,
šîñçé à çöļļéçţîöñ ŵîţĥ ñö ţàŕĝéţ ŵàš àļŕéàđý šöüŕçé-öñļý. Îţ ŕéçöŕđš ţĥé
îñţéñţ, àñđ ļöàđîñĝ ƒàîļš îƒ ţĥé çöļļéçţîöñ çöñţŕàđîçţš îţ. Šéé
Çĥéçķ-öñļý çöñţéñţ îñ öţĥéŕ àššéţš.
ÇöñţéñţÎţéḿ
| Ƒîéļđ | Ţýþé | Đéšçŕîþţîöñ |
|---|---|---|
path | šţŕîñĝ | Ĝļöƃ þàţţéŕñ ƒöŕ šöüŕçé ƒîļéš, ŕéļàţîṽé ţö ţĥé çöļļéçţîöñ'š base (ŕéǫüîŕéđ) |
base | šţŕîñĝ | Đîŕéçţöŕý à ḿàţçĥéđ ƒîļé'š þàţĥ îš ḿàđé ŕéļàţîṽé ţö; đéƒàüļţš ţö ţĥé ĝļöƃ'š ƒîẋéđ þŕéƒîẋ |
format | šţŕîñĝ öŕ ḿàþ | Ƒöŕḿàţ ÎĐ; àüţö-đéţéçţéđ þéŕ ƒîļé îƒ öḿîţţéđ |
target | šţŕîñĝ | Öüţþüţ þàţĥ ţéḿþļàţé (šéé Šöüŕçé àñđ ţàŕĝéţ þàţĥš) |
source_language | šţŕîñĝ | Öṽéŕŕîđéš ţĥé çöļļéçţîöñ'š àñđ ţĥé þŕöĵéçţ'š šöüŕçé ļàñĝüàĝé |
target_languages | šţŕîñĝ[] | Öṽéŕŕîđéš ţĥé çöļļéçţîöñ'š àñđ ţĥé þŕöĵéçţ'š ţàŕĝéţ ļàñĝüàĝéš |
channel | šţŕîñĝ | Öṽéŕŕîđéš ţĥé çöļļéçţîöñ'š channel: ƒöŕ ţĥé ƒîļéš ţĥîš îţéḿ ḿàţçĥéš (šéé Þŕöƒîļéš àñđ çĥàññéļš) |
redaction | ŔéđàçţîöñŠþéç | Öṽéŕŕîđéš defaults.redaction ƒöŕ ţĥîš îţéḿ |
comments | ƃööļ öŕ ḿàþ | Đéçļàŕéš ţĥé çöḿḿéñţš îñ ţĥé ḿàţçĥéđ ƒîļéš àš çöñţéñţ ţö çĥéçķ: Ĝö šöüŕçé, ŕéàđ ƒöŕ îţš çöḿḿéñţš àļöñé, àñđ ÝÀḾĻ, ẊḾĻ-ƃàšéđ, ĤŢḾĻ, Ḿàŕķđöŵñ, ḾĐẊ, ÞÖ àñđ þŕöþéŕţîéš ƒöŕḿàţš, ŵĥöšé çöḿḿéñţš àŕé çĥéçķéđ ƃéšîđé ţĥé ṽàļüéš ţĥéîŕ ŕéàđéŕš éẋţŕàçţ. Ţĥé ḿàþ ƒöŕḿ đéçļàŕéš ţĥéḿ ţöö, àñđ îţš directives ļîšţ ñàḿéš ḿàŕķéŕš ýöüŕ öŵñ ţööļš ŕéàđ àţ ţĥé šţàŕţ öƒ à çöḿḿéñţ ļîñé, ŵĥîçĥ àŕé šéţ àšîđé ƃéšîđé ţĥöšé üñđéŕ defaults.comments.directives. Îţš channel þļàçéš ţĥé çöḿḿéñţš àţ à þöîñţ öƒ ţĥéîŕ öŵñ, à ǫüàļîƒîéđ profile/channel: éàçĥ çöḿḿéñţ îš çĥéçķéđ üñđéŕ ţĥàţ þöîñţ'š ṽöîçé àñđ ţéŕḿš, àñđ ţĥé ŕéšţ öƒ ţĥé ƒîļé šţàýš àţ ţĥé îţéḿ'š þöîñţ. Îţš only: true đéçļàŕéš ţĥé ƒîļéš ƒöŕ ţĥéîŕ çöḿḿéñţš àļöñé: kapi çĥéçķš ţĥé çöḿḿéñţš àñđ ŕéàđš ñöñé öƒ ţĥé ṽàļüéš, šö kapi up, ƒļöŵ ŕüñš, kapi merge, kapi extract, kapi stats, kapi status çöṽéŕàĝé àñđ ţĥé --ship ĝàţéš ļéàṽé ţĥé ṽàļüéš àļöñé, àñđ ţĥé îţéḿ çàññöţ àļšö šéţ target, target_languages, redaction, format.config öŕ format.preset. Ĝö šöüŕçé îš ŕéàđ ƒöŕ îţš çöḿḿéñţš àļöñé ŵîţĥ öŕ ŵîţĥöüţ only. À ƒöŕḿàţ ţĥàţ šüþþļîéš ñö çöḿḿéñţš ḿàķéš ţĥé çĥéçķ ŕéþöŕţ ţĥàţ îţ đîđ ñöţ ŕüñ (šéé Çöḿḿéñţš îñ šöüŕçé çöđé) |
ƃàšé
À çöļļéçţîöñ'š base îš ŵĥéŕé ţĥé çöļļéçţîöñ ļîṽéš. Éṽéŕý path, target
àñđ îţéḿ base ƃéñéàţĥ îţ îš ŵŕîţţéñ ŕéļàţîṽé ţö ţĥàţ đîŕéçţöŕý àñđ ĵöîñéđ öñţö
îţ, šö à çöļļéçţîöñ ŕéàđš àš ţĥé ţŕéé îţ ĝöṽéŕñš ŕàţĥéŕ ţĥàñ àš à þŕéƒîẋ ŕéþéàţéđ
öñ éṽéŕý ļîñé:
collections:
- name: docs
base: web
content:
- path: "docs/**/*.mdx" # → web/docs/**/*.mdx
target: "i18n/{lang}/{path}.mdx" # → web/i18n/{lang}/{path}.mdx
Àñ îţéḿ'š öŵñ base îš ţĥé šéþàŕàţé, ñàŕŕöŵéŕ ţĥîñĝ: ţĥé đîŕéçţöŕý à ḿàţçĥéđ
ƒîļé'š þàţĥ îš ḿàđé ŕéļàţîṽé ţö, ŵĥîçĥ đŕîṽéš ţĥé {relpath} / {path} /
{dir} ţöķéñš. Àñ îţéḿ ţĥàţ đéçļàŕéš ñöñé ķééþš ñöñé, àñđ ţĥé ţöķéñš ţĥéñ
ŕéļàţîṽîžé àĝàîñšţ ţĥé ĵöîñéđ þàţţéŕñ'š öŵñ ƒîẋéđ þŕéƒîẋ.
Šöüŕçé àñđ ţàŕĝéţ þàţĥš
path îš à đöüƃļéšţàŕ ĝļöƃ: **
ḿàţçĥéš àçŕöšš đîŕéçţöŕîéš (é.ĝ. src/**/*.json) àñđ {a,b,c} ḿàţçĥéš àñý öƒ
ţĥé ļîšţéđ àļţéŕñàţîṽéš (é.ĝ. input/store/*.{json,yaml,html}). Öñé ĝļöƃ çàñ
ţĥéŕéƒöŕé çöṽéŕ à ŵĥöļé đîŕéçţöŕý öƒ ḿîẋéđ çöñţéñţ; ţĥé ƒöŕḿàţ îš àüţö-đéţéçţéđ
þéŕ ƒîļé üñļéšš ýöü þîñ format. Þàţţéŕñš ŕéšöļṽé ŕéļàţîṽé ţö ţĥé þŕöĵéçţ ŕööţ.
** đöéš ñöţ ƒöļļöŵ à šýḿƃöļîç ļîñķ îñţö àñöţĥéŕ đîŕéçţöŕý, šö ţĥé ļîñķéđ
þàçķàĝéš à þàçķàĝé ḿàñàĝéŕ ķééþš üñđéŕ node_modules šţàý öüţ öƒ à ḿàţçĥ. À
ļîñķ ţö à ƒîļé ţĥàţ ţĥé þàţţéŕñ ḿàţçĥéš îš ŕéàđ, àñđ šö îš à ļîñķéđ đîŕéçţöŕý
ţĥàţ ţĥé þàţţéŕñ ñàḿéš ƃéƒöŕé îţš ƒîŕšţ ŵîļđçàŕđ.
À ƒîļé ƃéļöñĝš ţö éẋàçţļý öñé îţéḿ. Îţéḿš àŕé ḿàţçĥéđ îñ ţĥé öŕđéŕ ţĥéý àŕé
ŵŕîţţéñ, àçŕöšš àļļ çöļļéçţîöñš, àñđ ţĥé ƒîŕšţ îţéḿ ŵĥöšé path ḿàţçĥéš à ƒîļé
çļàîḿš îţ; ļàţéŕ îţéḿš ñéṽéŕ šéé ţĥàţ ƒîļé, ĥöŵéṽéŕ šþéçîƒîç ţĥéîŕ þàţţéŕñ. Àñ
îţéḿ đéçļàŕéđ comments: {only: true} çļàîḿš öñļý çöḿḿéñţš, ŵĥéŕéṽéŕ îţ îš
ŵŕîţţéñ: ţĥé ƒîŕšţ öţĥéŕ îţéḿ ţĥàţ ḿàţçĥéš à ƒîļé çļàîḿš îţš ṽàļüéš, àñđ ţĥé
çöḿḿéñţš šţàý ŵîţĥ ţĥé çöḿḿéñţš-öñļý îţéḿ üñļéšš ţĥàţ öţĥéŕ îţéḿ çöḿéš ƒîŕšţ
àñđ đéçļàŕéš ţĥéḿ îţšéļƒ. Ţö þļàçé öñé ƒîļé àţ îţš öŵñ þöîñţ, öŕ üñđéŕ îţš öŵñ
ƒöŕḿàţ öŕ ţàŕĝéţ, ļîšţ îţš îţéḿ ƃéƒöŕé ţĥé ĝļöƃ ţĥàţ ŵöüļđ öţĥéŕŵîšé çöṽéŕ îţ:
collections:
- name: docs
channel: acme/docs
content:
- path: "docs/api-reference.md" # claimed here, at the reference point
channel: acme/reference
- path: "docs/**/*.md" # everything the item above did not claim
Ţĥé base îñ þļàý ĥéŕé îš ţĥé îţéḿ'š öŵñ: ţĥé đîŕéçţöŕý à ḿàţçĥéđ ƒîļé'š þàţĥ
îš ḿàđé ŕéļàţîṽé ţö, àƒţéŕ àñý çöļļéçţîöñ base ĥàš ƃééñ ƒöļđéđ îñ. Îţ đéƒàüļţš
ţö ţĥé ĝļöƃ'š ƒîẋéđ þŕéƒîẋ, ţĥé ļîţéŕàļ þàŕţ öƒ path ƃéƒöŕé ţĥé ƒîŕšţ ŵîļđçàŕđ
(input/docs/ ƒöŕ input/docs/**/*.md). Ţĥé ŕéļàţîṽé þàţĥ đŕîṽéš ţĥé {relpath}
/ {path} / {dir} ţöķéñš àñđ ĥöŵ ḿüçĥ öƒ ţĥé šöüŕçé ţŕéé à đîŕéçţöŕý-ḿîŕŕöŕ
ţàŕĝéţ ŕéþŕöđüçéš.
target îš ţĥé öüţþüţ-þàţĥ ţéḿþļàţé, éẋþàñđéđ þéŕ šöüŕçé ƒîļé àñđ ţàŕĝéţ
ļàñĝüàĝé. Ţĥé šüþþöŕţéđ ţöķéñš àŕé:
| Ţöķéñ | Ḿéàñîñĝ | Éẋàḿþļé (base input/, šöüŕçé input/docs/api.md) |
|---|---|---|
{lang} | Ţàŕĝéţ ļàñĝüàĝé | fr |
{relpath} | Šöüŕçé þàţĥ ŕéļàţîṽé ţö base, ŵîţĥ éẋţéñšîöñ | docs/api.md |
{path} | Šöüŕçé þàţĥ ŕéļàţîṽé ţö base, ŵîţĥöüţ éẋţéñšîöñ | docs/api |
{dir} | Đîŕéçţöŕý þöŕţîöñ öƒ {relpath} (éḿþţý àţ ţĥé ŕööţ) | docs |
{filename} | Ƒîļéñàḿé ŵîţĥ éẋţéñšîöñ | api.md |
{name} | Ƒîļéñàḿé ŵîţĥöüţ éẋţéñšîöñ (àļîàš {basename}) | api |
{ext} | Éẋţéñšîöñ ŵîţĥöüţ ţĥé đöţ | md |
À ƃàŕé * îš šĥöŕţĥàñđ ƒöŕ {name}.
Đîŕéçţöŕý-ḿîŕŕöŕ (ţĥé éàšý đéƒàüļţ). Ŵĥéñ target éñđš ŵîţĥ /, öŕ îţš ļàšţ
šéĝḿéñţ ĥàš ñö éẋţéñšîöñ àñđ ñö ŵîļđçàŕđ/ţöķéñ, îţ ñàḿéš à đîŕéçţöŕý àñđ ţĥé
šöüŕçé'š {relpath} (üñđéŕ base) îš ḿîŕŕöŕéđ ƃéñéàţĥ îţ. Šö target: output/{lang} ŕéþŕöđüçéš ţĥé šöüŕçé ţŕéé üñđéŕ éàçĥ þéŕ-ļàñĝüàĝé ŕööţ
(input/docs/api.md → output/fr/docs/api.md) ŵîţĥ ñö * àñđ ñö ŕîšķ öƒ à
đöüƃļéđ éẋţéñšîöñ:
collections:
- path: "input/**/*.md"
target: "output/{lang}"
Ţöķéñ ţéḿþļàţé (ţĥé éẋþļîçîţ ƒöŕḿ). Ŵĥéñ ýöü ñééđ ţö ŕéšĥàþé ţĥé ļàýöüţ, ñàḿé ţĥé ţöķéñš:
collections:
- path: "src/locales/en/*.json"
target: "src/locales/{lang}/{name}.{ext}" # api.json → src/locales/fr/api.json
Þŕöƒîļéš àñđ çĥàññéļš
Çöñţéñţ îš ŵŕîţţéñ ƒöŕ à þöîñţ îñ ţĥé çöñţéẋţ šþàçé. Ţŵö àẋéš àŕé šţŕüçţüŕàļ:
ţĥé þŕöđüçţ îţ ƃéļöñĝš ţö àñđ ţĥé çĥàññéļ îţ šĥîþš öñ. À ķéý üñđéŕ
profiles: îš à þŕöđüçţ, ţĥé çĥàññéļš ţĥàţ þŕöƒîļé ļîšţš àŕé ţĥé çĥàññéļš ţĥàţ
þŕöđüçţ šĥîþš öñ, àñđ à çöļļéçţîöñ ñàḿéš ţĥé þöîñţ îţš çöñţéñţ šîţš àţ ŵîţĥ öñé
channel: ŕéƒéŕéñçé. Ƒüŕţĥéŕ àẋéš àŕé đéçļàŕéđ üñđéŕ coordinates: (šéé
Đéçļàŕéđ àẋéš). Çöñţéẋţ îš ţĥé çöñçéþţ; ţĥîš
šéçţîöñ îš ţĥé šçĥéḿà.
profiles:
console:
channels: [app, docs]
voice: .kapi/profiles/console/voice.yaml
sdk:
channels:
- id: docs
concept: term:9a1c0f42b7
- cli
voice: .kapi/voice.yaml
valid_to: 2026-12-01
collections:
- name: console-app
channel: console/app
content:
- path: "console/i18n/**/*.kbf.json"
- name: sdk-docs
channel: sdk/docs
content:
- path: "web/docs/**/*.mdx"
- path: "web/docs/legal/**/*.mdx"
channel: sdk/cli
| Ƒîéļđ | Ţýþé | Đéšçŕîþţîöñ |
|---|---|---|
channels | Çĥàññéļ[] | Ţĥé šüŕƒàçéš ţĥîš þŕöđüçţ šĥîþš öñ. À šļüĝ, öŕ {id, concept} îñ ļöñĝ ƒöŕḿ |
voice | ṼöîçéƂîñđîñĝ | Ţĥé ṽöîçé þŕöƒîļé ĝöṽéŕñîñĝ ţĥîš þŕöđüçţ'š çöñţéñţ, îñ ţĥé šàḿé ƒöŕḿš àš defaults.voice. Üñšéţ ķééþš defaults.voice |
termstore | šţŕîñĝ | À šţàñđàļöñé ţéŕḿš šţöŕé ĝöṽéŕñîñĝ ţĥîš þŕöđüçţ'š çöñţéñţ, ŕéšöļṽéđ ŕéļàţîṽé ţö ţĥé þŕöĵéçţ ŕööţ. Üñšéţ, ţĥé þŕöĵéçţ'š öŵñ šţöŕé ĝöṽéŕñš |
concept | šţŕîñĝ | Ţĥé çöñçéþţ ţĥàţ ñàḿéš ţĥîš þŕöđüçţ, ƒöŕ đîšþļàý. Çàŕŕîéđ àñđ šĥàþé-çĥéçķéđ, ñéṽéŕ ŕéšöļṽéđ đüŕîñĝ ḿàţçĥîñĝ |
valid_from | šţŕîñĝ | Đàţé (YYYY-MM-DD) öŕ ŔƑÇ3339 îñšţàñţ ţĥîš þŕöƒîļé šţàŕţš ĝöṽéŕñîñĝ, îñçļüšîṽé. Üñšéţ îš üñƃöüñđéđ (šéé Þŕöƒîļé ṽàļîđîţý) |
valid_to | šţŕîñĝ | Đàţé öŕ ŔƑÇ3339 îñšţàñţ îţ šţöþš, éẋçļüšîṽé. Üñšéţ îš üñƃöüñđéđ |
Ţĥé ḿàþ ķéý îš ţĥé þŕöƒîļé'š ñàḿé: ţĥé þŕöđüçţ-àẋîš ṽàļüé îţš çöļļéçţîöñš çàŕŕý,
àñđ ţĥé đîŕéçţöŕý üñđéŕ .kapi/profiles/<name>/ ĥöļđîñĝ ţĥé ƒîļéš îţ öṽéŕŕîđéš.
À þŕöƒîļé ţĥàţ ƃîñđš ñéîţĥéŕ à ṽöîçé ñöŕ à ṽöçàƃüļàŕý îš šţîļļ à þŕöƒîļé: ţĥé
đîŕéçţöŕý îš ţĥé ƃîñđîñĝ.
Þŕöƒîļé ñàḿéš àñđ çĥàññéļš àŕé šļüĝš: ļöŵéŕçàšé ļéţţéŕš, đîĝîţš àñđ ĥýþĥéñš, šţàŕţîñĝ ŵîţĥ à ļéţţéŕ öŕ đîĝîţ. Ţĥéý àŕé ḿàçĥîñé îđéñţîƒîéŕš (šţàƃļé, ñéṽéŕ ţŕàñšļàţéđ, çöḿþàŕàƃļé ƃýţé ƒöŕ ƃýţé), ŵĥîçĥ îš ŵĥý à þŕöƒîļé öŕ à çĥàññéļ ḿàý çàŕŕý à çöñçéþţ ƒöŕ đîšþļàý ƃüţ ŕéšöļüţîöñ ñéṽéŕ ļööķš àţ îţ.
À çöļļéçţîöñ'š channel: îš àļŵàýš ŵŕîţţéñ profile/channel: ţĥé þŕöđüçţ öŵñš
ţĥé šüŕƒàçé, àñđ ţĥé ƃîñđîñĝ ŕéàđš àš öñé. À ƃàŕé çĥàññéļ ñàḿé îš à ļöàđ éŕŕöŕ
ţĥàţ šþéļļš öüţ ţĥé ǫüàļîƒîéđ ƒöŕḿ(š), éṽéñ ŵĥéñ éẋàçţļý öñé þŕöƒîļé đéçļàŕéš îţ.
Ƃîñđîñĝ à çĥàññéļ ŕéǫüîŕéš à ñàḿéđ çöļļéçţîöñ. À
çöļļéçţîöñ ţĥàţ ƃîñđš ñöñé îš ĝöṽéŕñéđ ƃý ţĥé þŕöĵéçţ đéƒàüļţ þöîñţ,
defaults.voice àñđ ţĥé þŕöĵéçţ'š öŵñ ţéŕḿš.
À çöñţéñţ îţéḿ ḿàý çàŕŕý îţš öŵñ channel:, îñ ţĥé šàḿé ǫüàļîƒîéđ ƒöŕḿ àñđ üñđéŕ
ţĥé šàḿé ļöàđ-ţîḿé ṽàļîđàţîöñ, ƒöŕ ţĥé ƒîļéš ţĥàţ îţéḿ ḿàţçĥéš. Îţ îš ţĥé ƒîñéšţ
þöîñţ à ŕéçîþé çàñ ñàḿé, àñđ éṽéŕýţĥîñĝ ŕéšöļṽéš ţö îţ: à ƒļöŵ ŕüñ þàŕţîţîöñš
ţĥöšé ƒîļéš öüţ öƒ ţĥé ŕéšţ öƒ ţĥé çöļļéçţîöñ àñđ ĝîṽéš ţĥéḿ ţĥéîŕ öŵñ ṽöîçé àñđ
ţéŕḿš, kapi check ĝàţéš ţĥéḿ àĝàîñšţ ţĥàţ ṽöçàƃüļàŕý, àñđ
kapi context search ŕéþöŕţš îţ àš ţĥé
þöîñţ éàçĥ üšé šîţš àţ.
Öñ à çöññéçţéđ þŕöĵéçţ, ţĥé ŕéšöļṽéđ þŕöđüçţ àñđ çĥàññéļ ţŕàṽéļ ţö ţĥé šéŕṽéŕ àš
ţĥé çöñţéñţ'š çööŕđîñàţéš, šö ƃöţĥ ṽéñüéš ŕéšöļṽé ţĥé šàḿé ṽöîçé ƒöŕ ţĥé šàḿé
çöñţéñţ. À þŕöƒîļé'š termstore: đöéš ñöţ: îţ îš à þàţĥ îñţö ţĥé ļöçàļ þŕöĵéçţ, àñđ
à çöññéçţéđ ŕüñ ŵàŕñš ţĥàţ ţĥé ƃîñđîñĝ àþþļîéš ļöçàļļý öñļý.
Çöñṽéñţîöñàļ ƒîļéš
À þŕöƒîļé'š öŵñ đîŕéçţöŕý àñšŵéŕš ƃéƒöŕé ţĥé þŕöĵéçţ đéƒàüļţ đöéš, šö öṽéŕŕîđéš ķéþţ îñ ţĥé çöñṽéñţîöñàļ þļàçé ñééđ ñö ļîñé îñ ţĥé ŕéçîþé. Ŕéšöļüţîöñ ƒöŕ à çöļļéçţîöñ'š þöîñţ, ḿöšţ šþéçîƒîç ƒîŕšţ:
| Šţöŕé | Öŕđéŕ |
|---|---|
| ṽöîçé | profiles.<name>.voice → .kapi/profiles/<name>/voice.yaml → defaults.voice → .kapi/voice.yaml → voice.yaml |
| ţéŕḿš | --termstore → profiles.<name>.termstore → .kapi/profiles/<name>/terms.json (ŵĥéñ ţĥé ƒîļé éẋîšţš) → ţĥé þŕöĵéçţ'š öŵñ šţöŕé |
Ţĥé çĥàññéļ ţĥéñ ŕéƒîñéš ţĥé ṽöîçé ţĥàţ ŕéšöļṽéđ: à ḿàţçĥîñĝ éñţŕý üñđéŕ ţĥé
ṽöîçé þŕöƒîļé'š öŵñ channels: ŕéþļàçéš îţš ţöñé, îţš šţýļé, öŕ ƃöţĥ, àñđ çàñ
àđđ ṽöçàƃüļàŕý ŕüļéš. Ţĥé þŕöƒîļé'š öŵñ ṽöçàƃüļàŕý àþþļîéš öñ éṽéŕý çĥàññéļ, àñđ
à çĥàññéļ'š ŕüļéš öñļý àđđ ţö îţ.
Đéçļàŕéđ àẋéš
Ƃéýöñđ þŕöđüçţ àñđ çĥàññéļ, à þŕöĵéçţ ñàḿéš ţĥé ƒüŕţĥéŕ àẋéš îţš çöñţéñţ ṽàŕîéš
àļöñĝ üñđéŕ defaults.coordinates. Éṽéŕý çöļļéçţîöñ îñĥéŕîţš ţĥéḿ; à çöļļéçţîöñ
ţĥàţ šîţš éļšéŵĥéŕé öñ öñé àẋîš šéţš ţĥàţ àẋîš îñ îţš öŵñ coordinates: àñđ
ķééþš ţĥé ŕéšţ. Þéŕ àẋîš, ţĥé ḿöšţ šþéçîƒîç ṽàļüé ŵîñš.
defaults:
coordinates:
brand: acme
collections:
- name: sdk-docs
channel: sdk/docs
coordinates:
mode: reference
content:
- path: "web/docs/**/*.mdx"
| Àẋîš | Çöñṽéñţîöñàļ ṽàļüéš | Ḿéàñîñĝ |
|---|---|---|
brand | à šļüĝ | Ţĥé ƃŕàñđ à þöîñţ šîţš üñđéŕ, çöàŕšéŕ ţĥàñ þŕöđüçţ |
mode | tutorial, how-to, reference, explanation | Ţĥé ķîñđ öƒ đöçüḿéñţ àţ ţĥé þöîñţ, îñ ţĥé Đîáţàẋîš šéñšé |
Ţĥé ḿàþ îš öþéñ: àñý öţĥéŕ àẋîš ñàḿé îš àççéþţéđ, àñđ ţĥé ṽàļüéš àŕé
çöñṽéñţîöñš ŕàţĥéŕ ţĥàñ àñ éñüḿéŕàţîöñ. product àñđ channel àŕé ŕéƒüšéđ
üñđéŕ coordinates: àţ ļöàđ, ƃéçàüšé ƃöţĥ àŕé đéŕîṽéđ ƒŕöḿ channel: àñđ à
đéçļàŕéđ çöþý çöüļđ çöñţŕàđîçţ ţĥé đéŕîṽéđ öñé. À çöļļéçţîöñ'š ŕéšöļṽéđ þöîñţ
(ţĥé đéƒàüļţš, öṽéŕļàîđ ŵîţĥ ŵĥàţ channel: đéŕîṽéš, öṽéŕļàîđ ŵîţĥ îţš öŵñ
coordinates:) îš ŵĥàţ kapi context ŕéþöŕţš àñđ ŵĥàţ à çöññéçţéđ þŕöĵéçţ
šéñđš ţö ţĥé šéŕṽéŕ.
Þŕöƒîļé ṽàļîđîţý
valid_from àñđ valid_to ƃöüñđ à þŕöƒîļé'š ĝöṽéŕñàñçé îñ ţîḿé, ţĥé šàḿé
ĥàļƒ-öþéñ ŵîñđöŵ à ţéŕḿ çàŕŕîéš, ŵîţĥ valid_from îñçļüšîṽé àñđ valid_to
éẋçļüšîṽé, šö à valid_to đàţé éẋçļüđéš ţĥàţ ŵĥöļé đàý. À ƃöüñđ îš à đàţé
(YYYY-MM-DD) öŕ àñ ŔƑÇ3339 îñšţàñţ; àñ üñþàŕšéàƃļé ƃöüñđ öŕ àñ îñṽéŕţéđ ŕàñĝé
ƒàîļš àţ ļöàđ.
À þŕöƒîļé öüţšîđé îţš ŵîñđöŵ đöéš ñöţ ĝöṽéŕñ. Ŕéšöļüţîöñ ƒàļļš ţĥŕöüĝĥ ţö ţĥé ñéẋţ ƃîñđîñĝ (à çöļļéçţîöñ'š çĥàññéļ üñđéŕ àñ éẋþîŕéđ îţéḿ çĥàññéļ, ţĥéñ ţĥé þŕöĵéçţ đéƒàüļţ) éẋàçţļý àš îƒ ţĥé éẋþîŕéđ þŕöƒîļé ŵéŕé àƃšéñţ, àñđ ţĥé ŕüñ, çĥéçķ öŕ þüšĥ ţĥàţ àþþļîéđ ţĥé ƒàļļ-ţĥŕöüĝĥ ŕéþöŕţš îţ öñçé:
governance: profile "sdk" expired 2026-12-01; governing with the project default
Ţĥé îñšţàñţ îš ţĥé ŕüñ'š öŵñ ŵàļļ çļöçķ; ţĥéŕé îš ñö ƒļàĝ ţö ŕéšöļṽé ƒöŕ àñöţĥéŕ
đàţé. kapi context search ŕéàđš éṽéŕý
ƃöüñđéđ þŕöƒîļé àĝàîñšţ ţĥé çüŕŕéñţ ţîḿé àñđ ļàƃéļš îţ active, upcoming öŕ
expired, šö à ŵîñđöŵ çàñ ƃé šééñ ƃéƒöŕé îţ çļöšéš.
Đéƒàüļţš
defaults ĥöļđš þŕöĵéçţ-ŵîđé þŕöçéššîñĝ šéţţîñĝš ţĥàţ îñđîṽîđüàļ çöñţéñţ îţéḿš çàñ öṽéŕŕîđé. Šéṽéŕàļ öƒ ţĥéšé àŕé ĝöṽéŕñéđ ƃý Ḿ-01.
| Ƒîéļđ | Ţýþé | Đéšçŕîþţîöñ |
|---|---|---|
source_language | šţŕîñĝ | ƂÇÞ-47 šöüŕçé ļöçàļé (é.ĝ., en) |
target_languages | šţŕîñĝ[] | ƂÇÞ-47 ţàŕĝéţ ļöçàļéš |
locale_format | šţŕîñĝ | Ļöçàļé šţýļé ƒöŕ ţĥé {lang} þļàçéĥöļđéŕ: bcp-47 (đéƒàüļţ) öŕ posix |
concurrency | îñţ | Ñüḿƃéŕ öƒ ƒîļéš ţö þŕöçéšš îñ þàŕàļļéļ |
parallel_blocks | îñţ | Ñüḿƃéŕ öƒ ƃļöçķš ţö þŕöçéšš îñ þàŕàļļéļ ŵîţĥîñ à ƒîļé |
encoding | šţŕîñĝ | Îñþüţ ƒîļé éñçöđîñĝ (đéƒàüļţ: utf-8) |
exclude | šţŕîñĝ[] | Ĝļöƃ þàţţéŕñš ñö çöļļéçţîöñ çļàîḿš: çöñţéñţ šçàññîñĝ šķîþš ţĥéḿ, àñđ à ƒîļé ýöü ñàḿé ţĥàţ öñé ḿàţçĥéš šîţš àţ ţĥé þŕöĵéçţ'š đéƒàüļţ þöîñţ (é.ĝ. **/*.generated.json) |
formats | ḿàþ | Þéŕ-ƒöŕḿàţ preset, config, àñđ đéţéçţîöñ priority öṽéŕŕîđéš (šéé ƒöŕḿàţš) |
merge | ḾéŕĝéĐéƒàüļţš | Ĥöŵ kapi merge ŕéšöļṽéš à ţŕàñšļàţöŕ'š ţàŕĝéţ àĝàîñšţ àñ éẋîšţîñĝ ţàŕĝéţ öŕ çöñţéñţ-ḿéḿöŕý éñţŕý (šéé ḿéŕĝé) |
memory | ḾéḿöŕýĐéƒàüļţš | Çöñţéñţ-ḿéḿöŕý þŕé-ƒîļļ öñ kapi extract àñđ ŵŕîţé-ƃàçķ öñ kapi merge (šéé ḿéḿöŕý) |
segmentation | ŠéĝḿéñţàţîöñĐéƒàüļţš | Öþţ-îñ šéñţéñçé-ļéṽéļ šéĝḿéñţàţîöñ öṽéŕļàý àþþļîéđ öñ éẋţŕàçţ (šéé šéĝḿéñţàţîöñ) |
redaction | ŔéđàçţîöñŠþéç | Ŕéþļàçé šéñšîţîṽé çöñţéñţ ŵîţĥ þŕöţéçţéđ þļàçéĥöļđéŕš ƃéƒöŕé þŕöçéššîñĝ àñđ ŕéšţöŕé îţ àƒţéŕŵàŕđš (šéé ŕéđàçţîöñ) |
annotations | ÀññöţàţîöñĐéƒàüļţš | write: ļîšţš ţĥé àññöţàţîöñ ţýþéš à ŵŕîţéŕ đŕàŵš îñţö ţĥé đöçüḿéñţ àš îñļîñé ḿàŕķš, öüţ öƒ ŵĥàţ ţĥé ƒöŕḿàţ đéçļàŕéš îţ çàñ çàŕŕý. Éḿþţý đŕàŵš éṽéŕý ţýþé ţĥé ƒöŕḿàţ šüþþöŕţš; ñàḿîñĝ à ţýþé à ƒöŕḿàţ çàññöţ çàŕŕý àšķš ƒöŕ ñöţĥîñĝ ţĥéŕé |
comments | ḿàþ | directives: ḿàŕķéŕš ýöüŕ öŵñ ţööļš ŕéàđ àţ ţĥé šţàŕţ öƒ à çöḿḿéñţ ļîñé, šéţ àšîđé ŵĥéŕéṽéŕ kapi ŕéàđš ţĥé þŕöĵéçţ'š çöḿḿéñţš. channel: ţĥé þöîñţ, à ǫüàļîƒîéđ profile/channel, àţ ŵĥîçĥ éṽéŕý đéçļàŕéđ îţéḿ'š çöḿḿéñţš šîţ üñļéšš ţĥé îţéḿ ñàḿéš îţš öŵñ (šéé Çöḿḿéñţš îñ šöüŕçé çöđé) |
voice | ṼöîçéƂîñđîñĝ | Ƃîñđ à ṽöîçé þŕöƒîļé àš šţàñđîñĝ þŕöĵéçţ çöñţéẋţ (šéé ṽöîçé). À þŕöƒîļé'š öŵñ voice: öṽéŕŕîđéš îţ ƒöŕ ţĥàţ þŕöđüçţ'š çöñţéñţ |
coordinates | ḿàþ | Ţĥé þŕöĵéçţ'š đéƒàüļţ þöîñţ öñ ţĥé đéçļàŕéđ àẋéš (brand, mode), îñĥéŕîţéđ ƃý éṽéŕý çöļļéçţîöñ; product àñđ channel àŕé đéŕîṽéđ ƒŕöḿ channel: àñđ ŕéĵéçţéđ ĥéŕé (šéé Đéçļàŕéđ àẋéš) |
terms_source | šţŕîñĝ | Çöḿḿîţţéđ, ĝîţ-ţŕàçķéđ ñàţîṽé šöüŕçé ƃüñđļé (à .terms.json) ţĥé þŕöĵéçţ'š ţéŕḿš àŕé çöḿþîļéđ ƒŕöḿ; kapi apply éđîţš îţ àñđ ŕé-îḿþöŕţš îñţö ţĥé þŕöĵéçţ šţöŕé, šö git diff îš ţĥé ŕéṽîéŵ šüŕƒàçé. Ƃîñđš àñý þàţĥ. Üñšéţ, kapi ƒàļļš ƃàçķ ţö <root>/.kapi/terms.json (ţĥé çöñṽéñţîöñàļ ĥöḿé îñ ţĥé çöḿḿîţţéđ çöñţéẋţ ĝŕàþĥ), ţĥéñ <root>/terms.json |
memory_source | šţŕîñĝ | Çöḿḿîţţéđ, ĝîţ-ţŕàçķéđ ñàţîṽé šöüŕçé ƃüñđļé (à .memory.json) ţĥé þŕöĵéçţ çöñţéñţ ḿéḿöŕý îš çöḿþîļéđ ƒŕöḿ, ţĥé çöñţéñţ-ḿéḿöŕý àñàļöĝüé öƒ terms_source. Îţ ĥàš ñö çöñṽéñţîöñàļ-ļöçàţîöñ ƒàļļƃàçķ: à þŕöĵéçţ ĥàš öñé àþþŕöṽéđ ţéŕḿ ļîšţ ƃüţ ḿàñý ḿéḿöŕý ƃüñđļéš (öñé þéŕ çöñţéñţ šüŕƒàçé), šö à šééđ îš àļŵàýš ñàḿéđ |
tools | ḿàþ | Þŕöĵéçţ-ļéṽéļ ţööļ þŕéšéţš, ķéýéđ ƃý ţööļ ñàḿé: çöñƒîĝ àþþļîéđ ŵĥéŕéṽéŕ ţĥàţ ţööļ ŕüñš îñ à þŕöĵéçţ ƒļöŵ. À šţéþ'š öŵñ config öṽéŕŕîđéš à þŕéšéţ þéŕ ķéý. term_rules: îš ţĥé ķéý term-check, translate, recycle, dnt-check àñđ pseudo-translate ţàķé ĥéŕé (öñé ţéŕḿ, ŵĥàţ ţö üšé îñšţéàđ, àñđ à šéṽéŕîţý; šéé ţĥé ṽöîçé þŕöƒîļé ŕéƒéŕéñçé) |
locales | ḿàþ | Þéŕ-ţàŕĝéţ-ļàñĝüàĝé öṽéŕŕîđéš ķéýéđ ƃý ļöçàļé. Éàçĥ éñţŕý'š tools: þŕéšéţš ḿéŕĝé öṽéŕ defaults.tools àñđ üñđéŕ à šţéþ'š öŵñ çöñƒîĝ ŵĥéñéṽéŕ à ƒļöŵ ŕüñš ƒöŕ ţĥàţ ļöçàļé, šö öñé ļöçàļé çàñ éñàƃļé ŕéđàçţîöñ öŕ à đéŕéñţ ḿöđéļ ŵîţĥöüţ ƒöŕķîñĝ ţĥé ƒļöŵ (šéé ţĥé kapi ļööþ) |
flow | šţŕîñĝ | Ţĥé þŕöĵéçţ'š đéƒàüļţ ƒļöŵ, ţĥé çöḿþöšéđ ƒļöŵ kapi up ŕüñš ţö çàţçĥ üþ éṽéŕý ļöçàļé. À ƃüîļţ-îñ ñàḿé (é.ĝ. translate) öŕ à ķéý îñ flows:. Éḿþţý ŕüñš ţĥé ƃüîļţ-îñ đéƒàüļţ (ŕéçýçļé → ţŕàñšļàţé) |
materialize | šţŕîñĝ | Ŵĥö đéļîṽéŕš ţŕàñšļàţéđ ƒîļéš. manual (đéƒàüļţ) ļéàṽéš đéļîṽéŕý ţö kapi merge öŕ kapi up --materialize; on-converge ḿàķéš kapi up ŵŕîţé à ļöçàļé'š ƒîļéš ţö ţĥé çöļļéçţîöñ'š target: öñļý öñçé îţš ĝàţéđ šçöþéš àŕé šĥîþþàƃļé |
jobs | îñţ | Ĥöŵ ḿàñý ţàŕĝéţ ļàñĝüàĝéš öñé kapi up þàšš ŕüñš çöñçüŕŕéñţļý. 0 (đéƒàüļţ) ļéàṽéš îţ ţö ţĥé ŕüññéŕ (4); --jobs öṽéŕŕîđéš þéŕ ŕüñ |
source_gate | šţŕîñĝ | Šöüŕçé-ƒîŕšţ çöñṽéŕĝéñçé ļéṽéļ: ţĥé šöüŕçé šţàţüš à ƃļöçķ ḿüšţ ŕéàçĥ ƃéƒöŕé îţ îš ţŕàñšļàţéđ (šéé šöüŕçé_ĝàţé) |
Îñđîṽîđüàļ çöñţéñţ îţéḿš çàñ öṽéŕŕîđé redaction þéŕ éñţŕý (ContentItem.redaction).
šöüŕçé_ĝàţé
defaults.source_gate îš ţĥé šöüŕçé-ƒîŕšţ çöñṽéŕĝéñçé ĝàţé: ţĥé šöüŕçé
šţàţüš à ƃļöçķ ḿüšţ ŕéàçĥ ƃéƒöŕé ţĥé ļööþ ţŕàñšļàţéš îţ. Îţ ĝàţéš ţĥé ƒàñ-öüţ,
àñđ îš đîšţîñçţ ƒŕöḿ ţĥé ţöþ-ļéṽéļ source_gate çöṽéŕàĝé ƃàŕ
ţĥàţ kapi check --ship éṽàļüàţéš. Šöüŕçé-ƒîŕšţ çöñṽéŕĝéñçé šéţţļéš ţĥé šöüŕçé
(ţéŕḿîñöļöĝý, ṽöîçé, šöüŕçé çĥéçķš) àñđ ĥöļđš ţĥé ƒàñ-öüţ öñ îţ, šö àñ üñšéţţļéđ,
ñöñ-çöḿþļîàñţ, üñ-ţéŕḿ-çĥéçķéđ šöüŕçé îš ñéṽéŕ ţŕàñšļàţéđ îñţö éṽéŕý ļöçàļé öñļý
ţö ƃé ŕéđöñé ŵĥéñ îţ çĥàñĝéš. Šéé
Çöñṽéŕĝéñçé: šöüŕçé ƒîŕšţ.
defaults:
source_gate: checked # the default: source cleared its automated terminology,
# voice, and source checks (no human bottleneck)
# source_gate: approved # require a human/agent source sign-off first
# source_gate: none # opt out: raw fan-out, no source gate
| Ṽàļüé | Ḿéàñîñĝ |
|---|---|
| (üñšéţ) | Ŕüññéŕ àþþļîéš ţĥé đéƒàüļţ (checked) |
authored | Þŕéšéñçé ƃàšéļîñé: àñý ñöñ-éḿþţý šöüŕçé ǫüàļîƒîéš |
checked | Đéƒàüļţ: šöüŕçé þàššéđ îţš àüţöḿàţéđ ţéŕḿîñöļöĝý, ṽöîçé àñđ šöüŕçé çĥéçķš |
approved | À ĥüḿàñ öŕ àĝéñţ šîĝñéđ öƒƒ ţĥé šöüŕçé (ṽöîçé-çŕîţîçàļ öŕ ŕéĝüļàţéđ çöñţéñţ) |
none | Đéļîƃéŕàţé öþţ-öüţ: ţŕàñšļàţé ŵîţĥöüţ šéţţļîñĝ ţĥé šöüŕçé ƒîŕšţ |
Öñ à çöññéçţéđ þŕöĵéçţ, à ƃéļöŵ-ĝàţé šöüŕçé ĥöļđš ţĥé çöñṽéŕĝéñçé ŕüñ
(source_not_ready) àñđ öþéñš à šöüŕçé-ŕéṽîéŵ ţàšķ ŕàţĥéŕ ţĥàñ ţŕàñšļàţîñĝ; ţĥé
šöüŕçé-šîđé çöṽéŕàĝé ƃàŕ àñđ ţĥîš çöñṽéŕĝéñçé ļéṽéļ àŕé îñđéþéñđéñţ çöñţŕöļš.
ƒöŕḿàţš
defaults.formats çöñƒîĝüŕéš ƒöŕḿàţš ƃý ñàḿé, šö à šîñĝļé ŵîļđçàŕđ çöñţéñţ îţéḿ
(path: "input/*", ñö format:) çàñ ļéţ éàçĥ ƒîļé'š éñĝîñé ƃé àüţö-đéţéçţéđ
ŵĥîļé ýöü šţîļļ ţüñé îñđîṽîđüàļ ƒöŕḿàţš îñ öñé þļàçé. Éàçĥ éñţŕý ţàķéš:
| Ƒîéļđ | Ţýþé | Đéšçŕîþţîöñ |
|---|---|---|
preset | šţŕîñĝ | À ñàḿéđ ƒöŕḿàţ þŕéšéţ àþþļîéđ ţö ţĥîš ƒöŕḿàţ (šéé kapi formats) |
config | ḿàþ | Ŕéàđéŕ öþţîöñ öṽéŕŕîđéš ƒöŕ ţĥîš ƒöŕḿàţ (ḿéŕĝéđ üñđéŕ, àñđ öṽéŕŕîđàƃļé ƃý, à çöñţéñţ îţéḿ'š format.config) |
priority | îñţ | Đéţéçţîöñ þŕîöŕîţý; ĥîĝĥéŕ ŵîñš ŵĥéñ šéṽéŕàļ ƒöŕḿàţš çļàîḿ ţĥé šàḿé éẋţéñšîöñ |
priority îš ţĥé éñĝîñé-þîñ éšçàþé ĥàţçĥ. Ḿöšţ éẋţéñšîöñš ḿàþ ţö öñé ƒöŕḿàţ, ƃüţ
šöḿé àŕé çļàîḿéđ ƃý šéṽéŕàļ: .srt ƃý ƃöţĥ okf_vtt àñđ okf_regex, .txt ƃý
šéṽéŕàļ þļàîñ-ţéẋţ éñĝîñéš. Ƃüḿþîñĝ ţĥé þŕéƒéŕŕéđ öñé šţééŕš àüţö-đéţéçţîöñ
ŵîţĥöüţ ñàḿîñĝ à ƒöŕḿàţ öñ éṽéŕý îţéḿ:
plugins:
okapi-bridge: "*"
defaults:
formats:
okf_vtt:
priority: 110 # .srt → WebVTT engine (beats okf_regex)
okf_json:
config:
useFullKeyPath: true
collections:
- name: Source Files
content:
- path: "input/*" # every file; engine auto-detected, two pinned above
target: "output/{lang}"
Þļüĝîñ ƒöŕḿàţš àļŕéàđý öüţŕàñķ ƃüîļţ-îñ öñéš ƃý đéƒàüļţ (þŕîöŕîţý 100 ṽš 50), šö
đéçļàŕîñĝ okapi-bridge îš éñöüĝĥ ƒöŕ input/* ţö ŕéšöļṽé ţö ţĥé okf_*
éñĝîñéš; priority öñļý ḿàţţéŕš ţö ƃŕéàķ ţîéš ƃéţŵééñ ƒöŕḿàţš ƒŕöḿ ţĥé šàḿé
šöüŕçé.
ḿéŕĝé
| Ƒîéļđ | Ţýþé | Đéšçŕîþţîöñ |
|---|---|---|
conflict_policy | šţŕîñĝ | translator-wins (đéƒàüļţ), existing-wins, öŕ newest-wins |
ḿéḿöŕý
| Ƒîéļđ | Ţýþé | Đéšçŕîþţîöñ |
|---|---|---|
fuzzy_threshold | îñţ | Ḿîñîḿüḿ ƒüžžý ḿàţçĥ šçöŕé (0–100) ţö þŕé-ƒîļļ ţĥé ţàŕĝéţ öñ éẋţŕàçţ (đéƒàüļţ: 75) |
šéĝḿéñţàţîöñ
| Ƒîéļđ | Ţýþé | Đéšçŕîþţîöñ |
|---|---|---|
source | ƃööļ | Ţöĝĝļé šéñţéñçé-ļéṽéļ šéĝḿéñţàţîöñ öƒ šöüŕçé ţéẋţ öñ éẋţŕàçţ |
srx | šţŕîñĝ | Öþţîöñàļ ŠŔẊ ŕüļéš ƒîļé; ƃüîļţ-îñ đéƒàüļţ ŕüļéš àŕé üšéđ ŵĥéñ éḿþţý |
ŕéđàçţîöñ
Ţĥé šéñšîţîṽé ţéŕḿ ļîšţ ļîṽéš îñ à šéþàŕàţé ŕüļéš ƒîļé ŕéƒéŕéñçéđ ƃý rules (šö îţ çàñ ƃé ĝîţîĝñöŕéđ); ţĥîš šþéç þöîñţš àţ îţ àñđ šéļéçţš đéţéçţîöñ ƃàçķéñđš.
| Ƒîéļđ | Ţýþé | Đéšçŕîþţîöñ |
|---|---|---|
enabled | ƃööļ | Ţüŕñ ŕéđàçţîöñ öñ ƒöŕ éẋţŕàçţ/ḿéŕĝé |
rules | šţŕîñĝ | Þàţĥ ţö à ŕéđàçţîöñ ŕüļéš ÝÀḾĻ ƒîļé |
detectors | šţŕîñĝ[] | Đéţéçţîöñ ƃàçķéñđš: rules àñđ/öŕ entities |
placeholder | šţŕîñĝ | Öṽéŕŕîđé ţĥé ṽîšîƃļé šţàñđ-îñ ţéḿþļàţé, é.ĝ. [REDACTED:{category}] |
ṽöîçé
Ƃîñđ à ṽöîçé þŕöƒîļé üñđéŕ defaults.voice. Éẋàçţļý öñé šöüŕçé îš éẋþéçţéđ. Ţĥé
šĥöŕţ ƒöŕḿ îš ţĥé þŕöƒîļé ƒîļé îţšéļƒ, voice: .kapi/voice.yaml, ŵĥîçĥ îš ŵĥàţ
à ŕéçîþé ŵŕîţéš ŵĥéñ ţĥé þŕöƒîļé îš à ƒîļé îñ ţĥé þŕöĵéçţ, àš îţ üšüàļļý îš.
| Ƒîéļđ | Ţýþé | Đéšçŕîþţîöñ |
|---|---|---|
profile_file | šţŕîñĝ | Þàţĥ ţö à šţàñđàļöñé þŕöƒîļé ÝÀḾĻ, ŕéšöļṽéđ ŕéļàţîṽé ţö ţĥé þŕöĵéçţ ŕööţ |
profile | šţŕîñĝ | Ñàḿé öƒ à þŕöƒîļé îñ ţĥé ļöçàļ ṽöîçé šţöŕé |
pack | šţŕîñĝ | Ñàḿé öƒ à ƃüîļţ-îñ šţàŕţéŕ þàçķ |
Ƒļöŵ Šţéþš
Éàçĥ ƒļöŵ çöñţàîñš àñ öŕđéŕéđ ļîšţ öƒ šţéþš. Šéé Ƒļöŵ Šţéþš Ƒöŕḿàţ ƒöŕ ţĥé ƒüļļ šþéçîƒîçàţîöñ.
flows:
my-flow:
steps:
- tool: translate # tool name (required)
config: # tool-specific config (optional)
provider: anthropic
label: "Translate" # display label (optional)
Šţéþš çàñ àļšö đéƒîñé þàŕàļļéļ ƃŕàñçĥéš:
flows:
parallel-qa:
steps:
- parallel:
- tool: qa
- tool: qa
config:
provider: anthropic
Šĥîþ ĝàţéš
Šĥîþ ĝàţéš đéçîđé ŵĥéñ ţŕàñšļàţéđ çöñţéñţ îš šĥîþþàƃļé: çöṽéŕàĝé ţĥŕéšĥöļđš
öṽéŕ ţĥé ţàŕĝéţ ļîƒéçýçļé ļàđđéŕ (draft → translated → reviewed →
signed-off), éñƒöŕçéđ ƃý kapi check --ship àñđ
đŕîṽéñ ţöŵàŕđ ƃý kapi up. Ţĥé ḿöđéļ (ļàđđéŕš,
đéŕîṽéđ šţàţé, ŕéṽîéŵ) îš ţĥé kapi ļööþ; ţĥîš šéçţîöñ îš
ţĥé šçĥéḿà. Àļļ öƒ ţĥéšé ķéýš àŕé ţöþ-ļéṽéļ (šîƃļîñĝš öƒ defaults) àñđ
öþţîöñàļ: ŵîţĥ ñöñé šéţ, ñöţĥîñĝ îš ĝàţéđ.
| Ƒîéļđ | Ţýþé | Đéšçŕîþţîöñ |
|---|---|---|
ship_gate | Ĝàţé | À šîñĝļé çàţçĥ-àļļ ĝàţé: šţàţé ñàḿé → ţĥŕéšĥöļđ |
ship_gates | ŠĥîþĜàţéŔüļé[] | Šçöþéđ ŕüļéš, éàçĥ à šéļéçţöŕ þļüš à ĝàţé; ŵĥéñ þŕéšéñţ îţ ŕéþļàçéš ship_gate |
gates | ḿàþ | Ñàḿéđ ĝàţé ŕéĝîšţŕý; à ship_gates ŕüļé ŕéƒéŕéñçéš àñ éñţŕý ŵîţĥ gate: <name> |
source_gate | Ĝàţé | À ĝàţé öṽéŕ ţĥé šöüŕçé àüţĥöŕîñĝ ļàđđéŕ (authored → checked → approved) |
verified_gate | Ĝàţé | À šîñĝļé çàţçĥ-àļļ ṽéŕîƒîéđ ĝàţé, îñ ţĥé šàḿé ţĥŕéšĥöļđ ƒöŕḿ àš ship_gate |
verified_gates | ŠĥîþĜàţéŔüļé[] | Šçöþéđ ṽéŕîƒîéđ-ĝàţé ŕüļéš; ţĥé ḿöšţ šþéçîƒîç ŕüļé ŵîñš |
Šĥîþþîñĝ àñđ ƃéîñĝ ṽéŕîƒîéđ àŕé îñđéþéñđéñţ ŕéàđîñĝš. À ṽéŕîƒîéđ ĝàţé ñàḿéš ţĥé
ƃàŕ à ļöçàļé ḿüšţ çļéàŕ ţö ƃé ŕéþöŕţéđ àš ṽéŕîƒîéđ (ƃý kapi status --ship
àñđ ţĥé šĥîþ-àŵàŕé ļàñĝüàĝé þîçķéŕ), àñđ à ļöçàļé çàñ šĥîþ ŵîţĥöüţ ḿééţîñĝ îţ.
Ŵîţĥ ñéîţĥéŕ ṽéŕîƒîéđ ķéý šéţ, ñö ļöçàļé îš ṽéŕîƒîéđ.
À šçöþé ñö šĥîþ ĝàţé ŕüļé ḿàţçĥéš îš ñöţ ĝàţéđ. kapi status àñđ kapi up
ñàḿé îţ ñöţ ĝàţéđ ŕàţĥéŕ ţĥàñ šĥîþþàƃļé, àñđ kapi status --ship ŕéçöŕđš
"state": "not_gated" ƒöŕ îţš ļöçàļé. Ñöţĥîñĝ ĥöļđš à ñöţ-ĝàţéđ šçöþé ƃàçķ öñ
çöṽéŕàĝé, šö kapi up đéļîṽéŕš îţ üñđéŕ materialize: on-converge àñđ à
ļàñĝüàĝé þîçķéŕ öƒƒéŕš îţ. Šţàļé ŵöŕđîñĝ, à ţŕàñšļàţîöñ à ŕéṽîéŵéŕ ţüŕñéđ đöŵñ,
à ƒàîļîñĝ çĥéçķ, öŕ ţéŕḿš ţĥàţ ŵéŕé ñöţ çĥéçķéđ ŵîţĥĥöļđ à šçöþé ŵĥéţĥéŕ öŕ ñöţ
à ĝàţé ḿàţçĥéš îţ. Éàçĥ šçöþé ŕéàđš àš öñé öƒ ţĥŕéé
šĥîþ šţàţéš:
| Šţàţé | Ŵĥéñ |
|---|---|
shippable | À šĥîþ ĝàţé ḿàţçĥéš ţĥé šçöþé àñđ ţĥé šçöþé çļéàŕš îţ, ŵîţĥ ñöţĥîñĝ ŵîţĥĥöļđîñĝ îţ |
withheld | Ţĥé šçöþé îš šĥöŕţ öƒ à ḿàţçĥîñĝ ĝàţé, öŕ šţàļé, ŕéĵéçţéđ, ƒàîļîñĝ öŕ üñçĥéçķéđ çöñţéñţ ĥöļđš îţ ƃàçķ |
not_gated | Ñö šĥîþ ĝàţé ḿàţçĥéš ţĥé šçöþé, àñđ ñöţĥîñĝ ŵîţĥĥöļđš îţ |
Ĝàţé àñđ ţĥŕéšĥöļđš
À ĝàţé ḿàþš à ļîƒéçýçļé šţàţé ţö à ţĥŕéšĥöļđ. À šçöþé çļéàŕš ţĥé ĝàţé ŵĥéñ, ƒöŕ éṽéŕý ţĥŕéšĥöļđ, àţ ļéàšţ ţĥàţ þéŕçéñţ öƒ îţš üñîţš àŕé àţ ţĥàţ šţàţé öŕ ĥîĝĥéŕ öñ ţĥé ļàđđéŕ. À ţĥŕéšĥöļđ îš ŵŕîţţéñ îñ öñé öƒ ţŵö ƒöŕḿš:
| Ƒöŕḿ | Éẋàḿþļé | Ḿéàñîñĝ |
|---|---|---|
| Šĥöŕţ | reviewed: 80 | Àţ ļéàšţ 80% àţ ŕéṽîéŵéđ öŕ ĥîĝĥéŕ; àþþŕöṽéŕ çļàšš đéƒàüļţš ţö human |
| Éẋţéñđéđ | reviewed: {pct: 80, by: any} | pct (0–100) þļüš àñ éẋþļîçîţ àþþŕöṽéŕ çļàšš by |
pct ḿüšţ ƃé 0–100; à ţĥŕéšĥöļđ öƒ 0 ḿéàñš "ñöţ ŕéǫüîŕéđ". by šéļéçţš ţĥé
àþþŕöṽéŕ çļàšš ƒöŕ ţĥé đéçîšîöñ ŕüñĝš (ŕéṽîéŵéđ, šîĝñéđ-öƒƒ): human
(ţĥé đéƒàüļţ) çöüñţš öñļý đéçîšîöñš ḿàđé ƃý à þéŕšöñ öŕ àñ àĝéñţ àçţîñĝ ƒöŕ
öñé, any àļšö çöüñţš àüţöñöḿöüš ÀÎ àþþŕöṽàļš. Ţĥé šĥöŕţ ƒöŕḿ àļŵàýš ḿéàñš
by: human; àñ ÀÎ-àþþŕöṽéđ üñîţ ñéṽéŕ šàţîéš îţ. Šéé
àþþŕöṽéŕ çļàššéš ƒöŕ ţĥé ŕàţîöñàļé.
Šîḿþļé ƒöŕḿ, öñé ƃàŕ ƒöŕ ţĥé ŵĥöļé þŕöĵéçţ:
ship_gate: { translated: 100, reviewed: 80 }
Éṽéŕý üñîţ ţŕàñšļàţéđ, ţĥé îḿþöŕţàñţ 80% ŕéṽîéŵéđ ƃý à þéŕšöñ; ţĥé ļöñĝ ţàîļ šĥîþš ḿàçĥîñé-ţŕàñšļàţéđ.
Éẋţéñđéđ ţĥŕéšĥöļđš, ţĥé šàḿé šĥàþé ŵîţĥ éẋþļîçîţ pct/by:
ship_gate:
translated: 100
reviewed: { pct: 100, by: any }
Ƒüļļý ŕéṽîéŵéđ, ƃüţ àüţöñöḿöüš ÀÎ ŕéṽîéŵš çöüñţ ţöŵàŕđ ţĥé ƃàŕ.
ŠĥîþĜàţéŔüļé
ship_gates îš àñ öŕđéŕéđ ŕüļé ļîšţ. Éàçĥ ŕüļé ĥàš:
| Ƒîéļđ | Ţýþé | Đéšçŕîþţîöñ |
|---|---|---|
when | Šéļéçţöŕ | Öþţîöñàļ ḿàţçĥ: locales àñđ/öŕ collections (šţŕîñĝ ļîšţš). Öḿîţţéđ = çàţçĥ-àļļ đéƒàüļţ |
gate | Ĝàţé öŕ šţŕîñĝ | Àñ îñļîñé ţĥŕéšĥöļđ ḿàþ, öŕ ţĥé ñàḿé öƒ àñ éñţŕý îñ ţĥé gates ŕéĝîšţŕý |
Àñ éḿþţý šéļéçţöŕ àẋîš ḿàţçĥéš éṽéŕýţĥîñĝ, šö à ŕüļé ŵîţĥ ñö when: îš ţĥé
đéƒàüļţ. Ŵĥéñ šéṽéŕàļ ŕüļéš ḿàţçĥ à (çöļļéçţîöñ, ļöçàļé) üñîţ, ţĥé ŕüļé
çöñšţŕàîñîñĝ ţĥé ḿöšţ àẋéš ŵîñš ŵĥöļéšàļé; àḿöñĝ éǫüàļ šþéçîƒîçîţý, ţĥé
éàŕļîéšţ-ļîšţéđ ŵîñš.
Šçöþéđ ŕüļéš, ŵĥéŕé đéŕéñţ šçöþéš àñšŵéŕ ţö đéŕéñţ ƃàŕš:
ship_gates:
- when: { locales: [de] } # contractually reviewed market
gate: { translated: 100, reviewed: 100 }
- when: { collections: [Legal] } # regulated content, every locale
gate: { translated: 100, signed-off: 100 }
- gate: { translated: 100, reviewed: 80 } # the default
Ñàḿéđ ĝàţéš, đéƒîñéđ öñçé îñ ţĥé gates ŕéĝîšţŕý àñđ ŕéƒéŕéñçéđ ƃý ñàḿé:
gates:
contractual: { translated: 100, reviewed: { pct: 100, by: human } }
machine: { translated: 100, reviewed: { pct: 100, by: any } }
ship_gates:
- when: { locales: [de, ja] }
gate: contractual
- gate: machine
À ţîéŕéđ þéŕ-ḿàŕķéţ šţŕàţéĝý ƃüîļţ ƒŕöḿ ţĥéšé þîéçéš îš ŵöŕķéđ ţĥŕöüĝĥ îñ Ţîéŕ ĝàţéš þéŕ ḿàŕķéţ.
šöüŕçé_ĝàţé
Ţĥé šöüŕçé-šîđé çöṽéŕàĝé ĝàţé: à ţĥŕéšĥöļđ ḿàþ öṽéŕ ţĥé àüţĥöŕîñĝ ļàđđéŕ
(authored → checked → approved), ĝàţîñĝ ţĥé àüţĥöŕ'š öŵñ çöñţéñţ ŕàţĥéŕ
ţĥàñ ţĥé ţŕàñšļàţîöñš.
source_gate: { checked: 100 }
Éṽéŕý šöüŕçé üñîţ çļéàŕš îţš ƃöüñđ ṽöîçé àñđ ţéŕḿîñöļöĝý çĥéçķš ƃéƒöŕé
kapi check --ship þàššéš. Ļîķé ship_gate, ţĥé ţöþ-ļéṽéļ source_gate îš à
çöṽéŕàĝé ƃàŕ éṽàļüàţéđ ƃý kapi check --ship; šöüŕçé đŕîƒţ ñéṽéŕ ƃļöçķš àñ
öŕđîñàŕý ƃüîļđ.
Ţĥîš îš đîšţîñçţ ƒŕöḿ defaults.source_gate, ţĥé
šöüŕçé-ƒîŕšţ çöñṽéŕĝéñçé ļéṽéļ (checked / approved / none) ţĥàţ đéçîđéš
ŵĥéţĥéŕ ţĥé ļööþ ţŕàñšļàţéš à ƃļöçķ àţ àļļ. Ţĥé çöṽéŕàĝé ƃàŕ àñšŵéŕš îš ţĥé
šöüŕçé šĥîþþàƃļé?; ţĥé çöñṽéŕĝéñçé ļéṽéļ àñšŵéŕš ḿàý ţĥîš šöüŕçé ƃé ţŕàñšļàţéđ
ýéţ?.
Ķéý Þŕöþéŕţîéš
- Ñö çŕéđéñţîàļš: ÀÞÎ ķéýš àŕé ñéṽéŕ šţöŕéđ îñ à kapi þŕöĵéçţ ƒîļé. Ţĥéý çöḿé ƒŕöḿ ţĥé ÖŠ ķéýçĥàîñ (
kapi credentials add, šĥàŕéđ ŵîţĥ Kapi Đéšķţöþ) öŕ ƒŕöḿ éñṽîŕöñḿéñţ ṽàŕîàƃļéš. - Ñö šţàţé: ñö šýñç çüŕšöŕš, çàçĥéš, öŕ ţîḿéšţàḿþš. À kapi þŕöĵéçţ ƒîļé îš àļŵàýš çļéàñ àñđ šàƒé ţö çöḿḿîţ.
- Þöŕţàƃļé: öñé
kapi.yamlþéŕ þŕöĵéçţ ƒöļđéŕ; šĥàŕé ṽîà ĝîţ. - ÇĻÎ-çöḿþàţîƃļé:
kapi run flowname -p kapi.yaml
Üšîñĝ ŵîţĥ Kapi ÇĻÎ
# Run a flow from a Kapi project
kapi run translate -p kapi.yaml
# Override defaults with CLI flags
kapi run translate -p kapi.yaml --target-lang de --provider openai
# One-shot mode still works without a project
kapi translate -i file.json --target-lang fr
Üšîñĝ ŵîţĥ Kapi Đéšķţöþ
- Ƒîļé > Öþéñ ļöàđš à þŕöĵéçţ ƃý îţš ƒöļđéŕ (ţĥé öñé çöñţàîñîñĝ
kapi.yaml) - Ƒîļé > Ñéŵ Þŕöĵéçţ çŕéàţéš öñé ƒŕöḿ šçŕàţçĥ: à ñàḿé, à ļöçàţîöñ àñđ à šöüŕçé ļàñĝüàĝé
- Ƒîļé > Ŕéçéñţ Þŕöĵéçţš ŕéöþéñš öñé ýöü ĥàṽé ŵöŕķéđ îñ ƃéƒöŕé
Ţĥé àþþ öþéñš ţö ýöüŕ þŕöĵéçţš àñđ éđîţš ţĥé ŕéçîþé îñ þļàçé: çöñţéñţ àñđ ĝöṽéŕñàñçé üñđéŕ Þŕöĵéçţ Šéţţîñĝš, ţĥé šţöŕéš üñđéŕ Çöñţéẋţ. Šéé ţĥé đéšķţöþ öṽéŕṽîéŵ.
Šéé àļšö
- Ç-01: Þŕöĵéçţ ḿöđéļ: ţĥé àŕçĥîţéçţüŕàļ đéçîšîöñ ƃéĥîñđ ţĥé
kapi.yamlŕéçîþé àñđ îţš éẋţéñšîöñ ḿéçĥàñîšḿ. - kapi.ýàḿļ Þŕöĵéçţ Ƒîļé Ƒöŕḿàţ: ţĥé îḿþļéḿéñţàţîöñ ñöţé; ţĥé
KapiProject,Defaults,CollectionàñđProfilešţŕüçţ ļàýöüţš, ţĥé ñàḿéđ-çöļļéçţîöñ çöñţéñţ šĥàþé, ṽàļîđàţîöñ ŕüļéš, àñđ ĥöŵ þļàţƒöŕḿ éẋţéñšîöñš đéçöđé üñķñöŵñ ķéýš. - Ƒļöŵ Šţéþš Ƒöŕḿàţ: ţĥé ƒüļļ šţéþ šþéçîƒîçàţîöñ üšéđ ƃý
flows.