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

Šöüŕçé Ļàñĝüàĝé Þŕéþàŕàţîöñ

Ǫüàļîţý ŕéšüļţš šţàŕţ ŵîţĥ ǫüàļîţý šöüŕçé çöñţéñţ. 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

Ţĥîš çàţçĥéš šöüŕçé-ļàñĝüàĝé îššüéš àţ ţĥé ÞŔ šţàĝé, ƃéƒöŕé ţĥéý þŕöþàĝàţé ţö ţŕàñšļàţîöñš.

Ŕéļàţéđ