Šöüŕçé Ļàñĝüàĝé Þŕéþàŕàţîöñ
Çĥéçķ, çļéàñ àñđ þŕéþàŕé šöüŕçé-ļàñĝüàĝé çöñţéñţ ƃéƒöŕé à ŕüñ çàŕŕîéš îţ îñţö éṽéŕý ţàŕĝéţ ļàñĝüàĝé. ķàþî ŕüñš ţĥéšé çĥéçķš ļöçàļļý àñđ îñ ÇÎ.
Ŵĥý ƒîẋ ţĥé šöüŕçé ƒîŕšţ
À ḿîššþéļļéđ ţéŕḿ, àñ îñçöñšîšţéñţ þļàçéĥöļđéŕ ƒöŕḿàţ öŕ à ḿîššîñĝ šéñţéñçé ƃöüñđàŕý îñ ţĥé šöüŕçé ŕéàþþéàŕš îñ éṽéŕý ţàŕĝéţ ļàñĝüàĝé. À ƒîẋ îñ ţĥé šöüŕçé îš öñé ƒîẋ îñšţéàđ öƒ öñé þéŕ ļàñĝüàĝé.
Çöḿḿöñ šöüŕçé þŕöƃļéḿš:
- Îñçöñšîšţéñţ ţéŕḿš: ţĥé šàḿé çöñçéþţ çàļļéđ đéŕéñţ ţĥîñĝš îñ đéŕéñţ ƒîļéš
- Þļàçéĥöļđéŕ éŕŕöŕš: ḿîšḿàţçĥéđ öŕ ḿàļƒöŕḿéđ ṽàŕîàƃļéš (ƒöŕ éẋàḿþļé
%sṽš%dḿîšḿàţçĥ) - Ŵĥîţéšþàçé îššüéš: ţŕàîļîñĝ šþàçéš, ḿîẋéđ ļîñé éñđîñĝš, žéŕö-ŵîđţĥ çĥàŕàçţéŕš
- Ļéñĝţĥ þŕöƃļéḿš: šţŕîñĝš ţöö ļöñĝ ƒöŕ ÜÎ çöñšţŕàîñţš
- Ḿîššîñĝ ţŕàñšļàţîöñš: šöüŕçé šţŕîñĝš ŵîţĥöüţ çöŕŕéšþöñđîñĝ ţàŕĝéţ éñţŕîéš
Çĥéçķš öñ Šöüŕçé Çöñţéñţ
Ŕüñ ǫüàļîţý çĥéçķš đîŕéçţļý öñ šöüŕçé ƒîļéš ŵîţĥöüţ àñý šéŕṽéŕ çöññéçţîöñ:
# Run the rule-based checks on source content
kapi exec qa -i src/locales/en/ --source-lang en
# Check the source against the terms store's forbidden and retired terms
kapi check src/locales/en/ --termstore product-terms
# Validate XML/HTML structure in source strings
kapi xml-validation -i src/locales/en/
Ƃüîļţ-Îñ Ŕüļéš
Ţĥé qa ţööļ ṽàļîđàţéš:
| Ŕüļé | Ŵĥàţ Îţ Çĥéçķš |
|---|---|
whitespace | Ļéàđîñĝ/ţŕàîļîñĝ ŵĥîţéšþàçé, đöüƃļé šþàçéš, ḿîẋéđ ļîñé éñđîñĝš |
punctuation | Ḿîššîñĝ öŕ ḿîšḿàţçĥéđ šéñţéñçé-éñđîñĝ þüñçţüàţîöñ |
placeholders | Þļàçéĥöļđéŕ ƒöŕḿàţ çöñšîšţéñçý àñđ çöḿþļéţéñéšš |
terminology | Ŕéǫüîŕéđ ţéŕḿš þŕéšéñţ àñđ çöŕŕéçţļý üšéđ |
length | Šţŕîñĝ ļéñĝţĥ ŵîţĥîñ çöñƒîĝüŕéđ ļîḿîţš |
patterns | Çüšţöḿ ŕéĝéẋ þàţţéŕñš (ƒöŕ éẋàḿþļé ƃŕàñđ ñàḿé çàþîţàļîžàţîöñ) |
characters | Îñṽàļîđ öŕ üñéẋþéçţéđ Üñîçöđé çĥàŕàçţéŕš |
Éẋàḿþļé Ƒļöŵš ƒöŕ Šöüŕçé Þŕéþ
Ţéŕḿ Çöñšîšţéñçý Çĥéçķ
Çŕéàţé flows/source-checks.yaml, ŵîţĥ flows_dir: flows îñ kapi.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
Ţĥé çöḿḿàñđ éẋîţš ñöñ-žéŕö ŵĥéñ à ƒîñđîñĝ ƒàîļš; àđṽîšöŕý ƒîñđîñĝš àŕé ŕéþöŕţéđ àñđ ƒàîļ ñöţĥîñĝ.
Šçöþîñĝ àñđ Çöñţéñţ Šţàţš
Ƃéƒöŕé šţàŕţîñĝ à þŕöĵéçţ, àñàļýžé ţĥé šöüŕçé çöñţéñţ:
# 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
Ţĥîš çàţçĥéš šöüŕçé-ļàñĝüàĝé îššüéš àţ ţĥé ÞŔ šţàĝé, ƃéƒöŕé ţĥéý þŕöþàĝàţé ţö ţŕàñšļàţîöñš.
Ŕéļàţéđ
- Ƒļöŵš: àṽàîļàƃļé ţööļš àñđ ƒļöŵ çöñƒîĝüŕàţîöñ
- Ţéŕḿš: ḿàñàĝîñĝ ţéŕḿš šţöŕéš
- Ŕüļé-ƃàšéđ çĥéçķš: ŕüļé-ƃàšéđ çöñţéñţ çĥéçķš
- ĜîţĤüƃ Àçţîöñš: ÇÎ/ÇĐ îñţéĝŕàţîöñ