Šöüŕçé Ļàñĝüàĝé Þŕéþàŕàţîöñ
Ǫüàļîţý ŕéšüļţš šţàŕţ ŵîţĥ ǫüàļîţý šöüŕçé çöñţéñţ. kapi þŕöṽîđéš ţööļš ţö ṽàļîđàţé, çļéàñ, àñđ þŕéþàŕé šöüŕçé-ļàñĝüàĝé çöñţéñţ ƃéƒöŕé ţĥé çöñṽéŕĝéñçé ļööþ çàŕŕîéš îţ îñţö éṽéŕý ţàŕĝéţ ļàñĝüàĝé.
Ŵĥý Šöüŕçé-Ƒîŕšţ Ǫüàļîţý Ḿàţţéŕš
Κšüéš îñ šöüŕçé çöñţéñţ çöḿþöüñđ ţĥŕöüĝĥ ţŕàñšļàţîöñ. À ḿîššþéļļéđ ţéŕḿ, àñ îñçöñšîšţéñţ þļàçéĥöļđéŕ ƒöŕḿàţ, öŕ à ḿîššîñĝ šéñţéñçé ƃöüñđàŕý îñ ţĥé šöüŕçé ŵîļļ þŕöđüçé ţĥé šàḿé þŕöƃļéḿ àçŕöšš éṽéŕý ţàŕĝéţ ļàñĝüàĝé. Ƒîẋîñĝ öñé šöüŕçé îššüé þŕéṽéñţš Ñ ţàŕĝéţ-ļàñĝüàĝé îššüéš.
Çöḿḿöñ šöüŕçé þŕöƃļéḿš:
- Îñçöñšîšţéñţ ţéŕḿš: ţĥé šàḿé çöñçéþţ çàļļéđ đéŕéñţ ţĥîñĝš îñ đéŕéñţ ƒîļéš
- Þļàçéĥöļđéŕ éŕŕöŕš: ḿîšḿàţçĥéđ öŕ ḿàļƒöŕḿéđ ṽàŕîàƃļéš (ƒöŕ éẋàḿþļé
%sṽš%dḿîšḿàţçĥ) - Ŵĥîţéšþàçé îššüéš: ţŕàîļîñĝ šþàçéš, ḿîẋéđ ļîñé éñđîñĝš, žéŕö-ŵîđţĥ çĥàŕàçţéŕš
- Ļéñĝţĥ þŕöƃļéḿš: šţŕîñĝš ţöö ļöñĝ ƒöŕ ÜÎ çöñšţŕàîñţš
- Ḿîššîñĝ ţŕàñšļàţîöñš: šöüŕçé šţŕîñĝš ŵîţĥöüţ çöŕŕéšþöñđîñĝ ţàŕĝéţ éñţŕîéš
Çĥéçķš öñ Šöüŕçé Çöñţéñţ
Ŕüñ ǫüàļîţý çĥéçķš đîŕéçţļý öñ šöüŕçé ƒîļéš ŵîţĥöüţ àñý šéŕṽéŕ çöññéçţîöñ:
# Run the rule-based checks on source content
kapi exec qa -i src/locales/en/ --source-lang en
# Check term consistency
kapi exec term-check -i src/locales/en/ --termstore terms.tbx
# Validate XML/HTML structure in source strings
kapi xml-validation -i src/locales/en/
Ƃüîļţ-Îñ Ŕüļéš
Ţĥé qa ţööļ ṽàļîđàţéš:
| Ŕüļé | Ŵĥàţ Îţ Çĥéçķš |
|---|---|
whitespace | Ļéàđîñĝ/ţŕàîļîñĝ ŵĥîţéšþàçé, đöüƃļé šþàçéš, ḿîẋéđ ļîñé éñđîñĝš |
punctuation | Ḿîššîñĝ öŕ ḿîšḿàţçĥéđ šéñţéñçé-éñđîñĝ þüñçţüàţîöñ |
placeholders | Þļàçéĥöļđéŕ ƒöŕḿàţ çöñšîšţéñçý àñđ çöḿþļéţéñéšš |
terminology | Ŕéǫüîŕéđ ţéŕḿš þŕéšéñţ àñđ çöŕŕéçţļý üšéđ |
length | Šţŕîñĝ ļéñĝţĥ ŵîţĥîñ çöñƒîĝüŕéđ ļîḿîţš |
patterns | Çüšţöḿ ŕéĝéẋ þàţţéŕñš (ƒöŕ éẋàḿþļé ƃŕàñđ ñàḿé çàþîţàļîžàţîöñ) |
characters | Îñṽàļîđ öŕ üñéẋþéçţéđ Üñîçöđé çĥàŕàçţéŕš |
Éẋàḿþļé Ƒļöŵš ƒöŕ Šöüŕçé Þŕéþ
Ţéŕḿ Çöñšîšţéñçý Çĥéçķ
Çŕéàţé .kapi/flows/source-checks.yaml:
Šţéþ çöñƒîĝ ķéýš àŕé ţĥé ţööļ'š öŵñ šçĥéḿà ķéýš, îñ çàḿéļÇàšé; šéé
ţĥé ţööļ ŕéƒéŕéñçé.
Àñ üñŕéçöĝñîžéđ ķéý îš šîļéñţļý îĝñöŕéđ, šö à ḿîššþéļļîñĝ çöšţš ýöü ţĥé çĥéçķ
ŕàţĥéŕ ţĥàñ àñ éŕŕöŕ. Ţĥé ļöçàļé îš ñöţ à çöñƒîĝ ķéý éîţĥéŕ: îţ çöḿéš ƒŕöḿ ţĥé
ŕüñ'š --target-lang, šö öñé ƒļöŵ šéŕṽéš éṽéŕý ļöçàļé.
name: source-checks
description: Validate source content quality before translation
steps:
- tool: term-check
config:
caseSensitive: true
- tool: placeholder-check
config:
flagExtra: true
- tool: qa
config:
checkDoubleSpaces: true
checkDoubledWord: true
checkPatterns: true
checkTargetInconsistency: true
Ŕüñ îţ, ţĥéñ ĝàţé öñ ţĥé ƒîñđîñĝš: ţĥé ƒļöŵ àññöţàţéš ţĥé çöñţéñţ, àñđ
kapi check îš ŵĥàţ ţüŕñš ƒîñđîñĝš îñţö àñ éẋîţ çöđé:
kapi run source-checks --target-lang fr
kapi check src/locales/en/*.json --target src/locales/fr/app.json \
--target-lang fr --max-critical 0
Šçöþîñĝ àñđ Çöñţéñţ Šţàţš
Ƃéƒöŕé šţàŕţîñĝ à þŕöĵéçţ, àñàļýžé ţĥé šöüŕçé çöñţéñţ:
# Content stats (blocks, words, characters) across all source files
kapi stats src/locales/en/*.json
# Memory reuse, remaining work, and token estimate for the pending locales
kapi up --plan
Çļéàñüþ
case-transform ñöŕḿàļîžéš ţĥé šöüŕçé; whitespace-correct ţîđîéš ţĥé ţàŕĝéţ
àĝàîñšţ îţ, šö îţ ŕüñš àƒţéŕ à ţàŕĝéţ éẋîšţš. Šţéþ çöñƒîĝ ķéýš àŕé çàḿéļÇàšé,
ţĥé šàḿé šþéļļîñĝ àš ţĥé ţööļ'š šçĥéḿà, ŵĥîçĥ
ţĥé ţööļ ŕéƒéŕéñçé
ļîšţš.
name: cleanup
description: Normalize source case, then tidy the target's whitespace
steps:
- tool: case-transform
config:
mode: title
applySource: true
- tool: whitespace-correct
config:
normalizeSpaces: true
matchSourceWhitespace: true
removeZeroWidthChars: true
ÇÎ Îñţéĝŕàţîöñ
Þŕé-Þüšĥ Çĥéçķ Ĝàţé
Àđđ ţĥé šöüŕçé çĥéçķš ţö ýöüŕ ÇÎ þîþéļîñé šö çöñţéñţ ţĥàţ ƒàîļš ṽàļîđàţîöñ ñéṽéŕ ŕéàçĥéš ţĥé šéŕṽéŕ. Đéçļàŕé ļöçàļ àüţöḿàţîöñ ŕüļéš àţ ţĥé ţöþ ļéṽéļ öƒ ýöüŕ kapi.yaml ŕéçîþé:
automations:
- name: checks-before-push
trigger: pre-push
actions:
- type: run_flow
config:
flow: source-checks
fail_on_error: true
ĜîţĤüƃ Àçţîöñš
Ŕüñ ţĥé šöüŕçé çĥéçķš öñ éṽéŕý þüļļ ŕéǫüéšţ ţĥàţ ḿöđîƒîéš çöñţéñţ ƒîļéš:
name: Source checks
on:
pull_request:
paths:
- "src/locales/en/**"
jobs:
source-checks:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: neokapi/setup-kapi@v1
with:
version: "1.2.0"
plugins: bowrain@1.2.0
- name: Run the source checks
run: kapi run source-checks
- name: Content stats report
run: kapi stats src/locales/en/*.json --json
Ţĥîš çàţçĥéš šöüŕçé-ļàñĝüàĝé îššüéš àţ ţĥé ÞŔ šţàĝé, ƃéƒöŕé ţĥéý þŕöþàĝàţé ţö ţŕàñšļàţîöñš.
Ŕéļàţéđ
- Ƒļöŵš: àṽàîļàƃļé ţööļš àñđ ƒļöŵ çöñƒîĝüŕàţîöñ
- Ţéŕḿš: ḿàñàĝîñĝ ţéŕḿš šţöŕéš
- Ŕüļé-ƃàšéđ çĥéçķš: ŕüļé-ƃàšéđ çöñţéñţ çĥéçķš
- ĜîţĤüƃ Àçţîöñš: ÇÎ/ÇĐ îñţéĝŕàţîöñ