Skip to main content

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ą.

1

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ą.

Vertimų klaidos turi išskirtinę savybę: jų nemato kūrėjas, nemato peržiūrėtojas, o mato tik konkrečios lokalės naudotojai. CI tikrinimas yra vienintelis patikimas būdas jas aptikti prieš gamybinę aplinką.
2

Į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.

Terminal
npm install --save-dev @anthropic/i18n-validate
3

GitHub 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
# .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.xml
Darbo eigoje prisekite i18n-validate versiją, kad naujos tikrinimo taisyklės netikėtai nieko nesugadintų. @latest naudokite tik kūrimo aplinkoje.
4

GitLab 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
# .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/**/*
5

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
# .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
fi
Išankstinio fiksavimo kabliai vykdomi per kiekvieną fiksavimą, todėl jie turi būti greiti. Naudodami žymą --locales tikrinkite tik dabartiniame fiksavime pakeistas lokales, o ne visas. Daugumoje projektų taip kablys įvykdomas greičiau nei per 2 sekundes.
6

Konfigū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
// 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

Registruotis nereikiaMomentinis įvertis

DUK apie vertimų tikrinimą CI aplinkoje