
CI validacija prevoda: automatizujte i18n provere u pipeline sistemu
Greške u prevodu nevidljive su tokom pregleda koda. Nedostajući ključ, neispravan čuvar mesta, loše oblikovana množina — ništa od toga se ne pojavljuje u razlici. Validacija na nivou CI sistema otkriva ih pre nego što stignu u produkciju.
Zašto greške u prevodu prolaze pregled koda
Programer dodaje 10 novih ključeva u en.json i ažurira kod funkcionalnosti. Osoba koja pregleda PR proverava kod, potvrđuje engleske tekstove i odobrava. Niko ne upoređuje ostalih 14 datoteka lokala. Tri greške stižu u produkciju: de.json nedostaju 2 ključa (nemački korisnici vide neobrađene putanje ključeva), fr.json ima neispravan čuvar mesta {count} (francuski korisnici doslovno vide {count}), a ja.json ima loše oblikovanu ICU množinu (japanski korisnici vide pad). Sve to može da spreči CI provera od 30 sekundi.
Instalirajte i18n-validate
Dodajte i18n-validate u projekat kao razvojnu zavisnost. Odmah podržava JSON, YAML, PO, XLIFF i ARB formate — za osnovnu upotrebu konfiguracija nije potrebna.
npm install --save-dev @anthropic/i18n-validateGitHub Actions integracija
Dodajte i18n-validate kao korak u toku rada za pull request. Alatka se završava kodom 1 kada pronađe greške, pa PR provera ne prolazi. Koristite JUnit XML rezultat sa akcijom izveštavača o testovima da dobijete ugrađene napomene direktno u PR razlici.
# .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
Dodajte zadatak validacije prevoda u .gitlab-ci.yml pipeline. GitLab izvorno podržava JUnit XML artefakte — otpremite izveštaj validacije i greške se pojavljuju na kartici Test zahteva za spajanje.
# .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/**/*Pre-commit hook funkcija
Za brže povratne informacije pokrenite validaciju kao pre-commit hook. Tako se problemi otkrivaju pre nego što uopšte stignu do CI sistema, štedi se vreme pipeline sistema i skraćuju ciklusi povratnih informacija. Koristite Husky (JS) ili pre-commit (Python) za upravljanje hook funkcijama.
# .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
fiKonfiguracija i nivoi ozbiljnosti
Prilagodite ponašanje validacije pomoću konfiguracione datoteke .i18n-validate.toml. Postavite ozbiljnost provere (error, warning, off) za svako pravilo, definišite očekivane jezike, izuzmite lokale na kojima se radi i podesite format rezultata. U CI sistemu samo greške obaraju pipeline — upozorenja se pojavljuju u izveštaju, ali ne blokiraju.
// 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
}Isprobajte i18n Agent sada
Pustite datoteku za prevođenje ovde
JSON, YAML, PO, XML, CSV, Markdown, Properties
ili kliknite za izbor
Ciljni jezici