
CI-fordításellenőrzés: i18n-ellenőrzések automatizálása a folyamatban
A fordítási hibák láthatatlanok a kódellenőrzésben. Hiányzó kulcs, hibás helyőrző, rosszul formázott többes szám — egyik sem látszik a különbségben. A CI-szintű ellenőrzés élesítés előtt észleli őket.
Miért csúsznak át a fordítási hibák a kódellenőrzésen?
Egy fejlesztő 10 új kulcsot ad az en.json fájlhoz. Az ellenőrző átnézi a kódot és az angol szövegeket, majd jóváhagyja. Senki sem hasonlítja össze a másik 14 területifájlt. Három hiba kerül élesbe: de.json-ból hiányzik 2 kulcs (nyers útvonalak), fr.json-ban hibás a {count} helyőrző (literális {count}), ja.json-ban hibás az ICU többes szám (összeomlás). Egy 30 másodperces CI-ellenőrzés mindet megelőzi.
Az i18n-validate telepítése
Adja az i18n-validate eszközt fejlesztési függőségként a projekthez. Alapból támogatja a JSON, YAML, PO, XLIFF és ARB formátumot — az egyszerű használathoz nincs szükség beállításra.
npm install --save-dev @anthropic/i18n-validateGitHub Actions-integráció
Adja az i18n-validate eszközt a pull request munkafolyamat egyik lépéseként. Hiba esetén 1-es kóddal lép ki, meghiúsítva az ellenőrzést. JUnit XML-kimenettel és tesztjelentő művelettel közvetlenül a PR-különbségen kap soron belüli megjegyzéseket.
# .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-integráció
Adjon fordításellenőrzési feladatot a .gitlab-ci.yml folyamathoz. A GitLab natívan támogatja a JUnit XML-műtermékeket — töltse fel a jelentést, a hibák pedig megjelennek a merge request Tests lapján.
# .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
Gyorsabb visszajelzéshez futtassa az ellenőrzést pre-commit hookként. Így még CI előtt észleli a hibákat, csökkentve a folyamat idejét és a visszacsatolási kört. Hookkezeléshez használjon Huskyt (JS) vagy pre-commitot (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
fiBeállítás és súlyossági szintek
Az ellenőrzést .i18n-validate.toml fájllal szabja testre. Szabályonként állítson súlyosságot (error, warning, off), adja meg az elvárt nyelveket, zárja ki a fejlesztés alatt álló területeket, és állítsa be a kimenetet. CI-ben csak a hibák állítják meg a folyamatot; a figyelmeztetések nem blokkolnak.
// 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
}Try i18n Agent Now
Drop your translation file here
JSON, YAML, PO, XML, CSV, Markdown, Properties
or click to browse
Target languages