Skip to main content

Tõlgete CI-valideerimine: automatiseeri i18n-i kontrollid konveieris

Tõlkevead on koodiülevaatuses nähtamatud. Puuduv võti, katkine kohatäitja või vigane mitmusevorm ei ilmu diffis. CI-taseme valideerimine leiab need enne tootmiskeskkonda jõudmist.

1

Miks tõlkevead koodiülevaatusest läbi lipsavad

Arendaja lisab faili en.json 10 uut võtit ja värskendab funktsiooni koodi. PR-i ülevaataja kontrollib koodi, kinnitab ingliskeelsed stringid ja kiidab muudatuse heaks. Keegi ei võrdle 14 muud lokaadifaili. Tootmiskeskkonda jõuab kolm viga: de.json-ist puudub kaks võtit (saksa kasutajad näevad töötlemata võtmeradu), fr.json-is on katkine {count} kohatäitja (prantsuse kasutajad näevad sõnasõnalist {count} teksti) ja ja.json-is on vigane ICU mitmusesüntaks (jaapani kasutajatel jookseb rakendus kokku). Need on välditavad 30-sekundilise CI-kontrolliga.

Tõlkevigadel on ainulaadne omadus: need on nähtamatud arendajale ja ülevaatajale ning nähtavad ainult kindla lokaadi kasutajatele. CI-valideerimine on ainus usaldusväärne viis nende leidmiseks enne tootmiskeskkonda.
2

Paigalda i18n-validate

Lisa i18n-validate projekti arendussõltuvusena. See toetab kohe JSON-, YAML-, PO-, XLIFF- ja ARB-vorminguid ning põhikasutus ei vaja seadistamist.

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

GitHub Actions'i lõiming

Lisa i18n-validate pull request'i töövoo etapiks. Tööriist väljub vigade leidmisel koodiga 1, põhjustades PR-i kontrolli nurjumise. Kasuta JUnit XML-i väljundit koos testiraporti toiminguga, et saada realisesed märkused otse PR-i diffi.

.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
Kinnita i18n-validate'i versioon töövoos, et vältida uute valideerimisreeglite põhjustatud ootamatuid katkestusi. Kasuta @latest versiooni ainult arenduses.
4

GitLab CI lõiming

Lisa .gitlab-ci.yml konveierisse tõlkevalideerimise töö. GitLab toetab JUnit XML-i artefakte loomupäraselt — laadi valideerimisaruanne üles ning vead ilmuvad merge request'i vahekaardil 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

Commitieelne hook

Kiirema tagasiside jaoks käivita valideerimine commitieelse hook'ina. See leiab probleemid enne CI-sse jõudmist, säästab konveieri aega ja lühendab tagasisideahelaid. Hook'ide haldamiseks kasuta Huskyt (JS) või pre-commitit (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
Commitieelsed hook'id käivituvad iga commiti puhul, seega hoia need kiired. Kasuta valikut --locales, et valideerida kõigi lokaatide asemel ainult praeguses commitis muutunud lokaate. Nii jääb hook'i käitusaeg enamiku projektide puhul alla kahe sekundi.
6

Seadistus ja raskusastmed

Kohanda valideerimiskäitumist seadistusfailiga .i18n-validate.toml. Määra reeglite raskusaste (tõrge, hoiatus, väljas), oodatud keeled, välista pooleliolevad lokaadid ja seadista väljundvorming. CI-s nurjavad konveieri ainult tõrked — hoiatused ilmuvad aruandes, kuid ei blokeeri.

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
}

Proovi i18n Agent'i kohe

Kukuta tõlkefail siia

JSON, YAML, PO, XML, CSV, Markdown, Properties

või klõpsa faili valimiseks

Sihtkeeled

Registreerumine pole vajalikKohene hinnang

Tõlgete CI-valideerimise KKK