
Vertimų tikrinimas CI aplinkoje: automatizuokite i18n patikras savo konvejeryje
Vertimų klaidų nematyti peržiūrint kodą. Trūkstamas raktas, sugadintas vietaženklis, netinkamai suformuota daugiskaita – niekas iš to nerodoma skirtume. Tikrinimas CI lygmeniu aptinka jas prieš pasiekiant gamybinę aplinką.
Kodėl vertimų klaidos praslysta pro kodo peržiūrą
Kūrėjas į en.json prideda 10 naujų raktų ir atnaujina funkcijos kodą. PR peržiūrėtojas patikrina kodą, patvirtina angliškas eilutes ir pritaria pakeitimams. Niekas nepalygina kitų 14 lokalės failų. Į gamybinę aplinką patenka trys klaidos: de.json trūksta 2 raktų (Vokietijos naudotojai mato neapdorotus raktų kelius), fr.json turi sugadintą {count} vietaženklį (Prancūzijos naudotojai mato pažodinį {count}), o ja.json – netinkamai suformuotą ICU daugiskaitą (Japonijos naudotojams programa užstringa). Šių klaidų galima išvengti per 30 sekundžių CI patikrą.
Įdiekite i18n-validate
Pridėkite i18n-validate prie projekto kaip kūrimo priklausomybę. Jis iškart palaiko JSON, YAML, PO, XLIFF ir ARB formatus – pagrindiniam naudojimui konfigūruoti nereikia.
npm install --save-dev @anthropic/i18n-validateGitHub Actions integracija
Pridėkite i18n-validate kaip veiksmą ištraukimo užklausų darbo eigoje. Aptikęs klaidų įrankis baigia darbą su kodu 1, todėl PR patikra nepavyksta. Naudokite JUnit XML išvestį su testų ataskaitų veiksmu, kad gautumėte tiesiogines pastabas PR skirtume.
# .github/workflows/i18n-validate.yml
name: Validate Translations
on:
pull_request:
paths:
- 'src/locales/**'
- 'public/locales/**'
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install dependencies
run: npm ci
- name: Validate translation files
run: npx i18n-validate \
--source src/locales/en.json \
--targets 'src/locales/*.json' \
--check-missing \
--check-unused \
--check-placeholders \
--check-plurals \
--min-coverage 95 \
--junit-output reports/i18n.xml
- name: Upload report
if: always()
uses: actions/upload-artifact@v4
with:
name: i18n-validation-report
path: reports/i18n.xmlGitLab CI integracija
Pridėkite vertimų tikrinimo užduotį prie .gitlab-ci.yml konvejerio. GitLab savaime palaiko JUnit XML artefaktus – įkelkite tikrinimo ataskaitą, ir klaidos bus rodomos suliejimo užklausos skirtuke Test.
# .gitlab-ci.yml
i18n-validate:
stage: test
image: node:20
script:
- npm ci
- npx i18n-validate \
--source src/locales/en.json \
--targets 'src/locales/*.json' \
--check-missing \
--check-unused \
--check-placeholders \
--min-coverage 95 \
--junit-output reports/i18n.xml
artifacts:
reports:
junit: reports/i18n.xml
only:
changes:
- src/locales/**/*Išankstinio fiksavimo kablys
Norėdami greitesnio grįžtamojo ryšio, vykdykite tikrinimą kaip išankstinio fiksavimo kablį. Taip problemos aptinkamos dar nepasiekus CI, taupomas konvejerio laikas ir trumpėja grįžtamojo ryšio ciklai. Kabliams valdyti naudokite Husky (JS) arba pre-commit (Python).
# .husky/pre-commit
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
# Only validate if translation files changed
CHANGED_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep -E '(locales|i18n|translations)/')
if [ -n "$CHANGED_FILES" ]; then
echo "Translation files changed, validating..."
npx i18n-validate \
--source src/locales/en.json \
--targets 'src/locales/*.json' \
--check-missing \
--check-placeholders
fiKonfigūracija ir svarbos lygiai
Pritaikykite tikrinimo elgseną naudodami .i18n-validate.toml konfigūracijos failą. Kiekvienai taisyklei nustatykite patikros svarbą (error, warning, off), apibrėžkite numatomas kalbas, neįtraukite nebaigtų lokalių ir sukonfigūruokite išvesties formatą. CI aplinkoje konvejerį sustabdo tik klaidos – įspėjimai rodomi ataskaitoje, bet neblokuoja.
// i18n-validate.config.json
{
"source": "src/locales/en.json",
"targets": "src/locales/*.json",
"checks": {
"missing": true, // Keys in source missing from target
"unused": true, // Keys in target not in source
"placeholders": true, // Mismatched {variables}
"plurals": true, // Missing CLDR plural forms
"icu": true, // ICU syntax validation
"emptyValues": true, // Empty string values
"duplicateValues": false // Same value as source (untranslated)
},
"minCoverage": 95,
"exclude": [
"src/locales/pseudo.json"
],
"junitOutput": "reports/i18n.xml",
"format": "json" // json | yaml | po | xliff
}Išbandykite i18n Agent dabar
Nuvilkite vertimo failą čia
JSON, YAML, PO, XML, CSV, Markdown, Properties
arba spustelėkite norėdami pasirinkti
Tikslinės kalbos