Skip to main content

Preverjanje prevodov v CI: avtomatizirajte preverjanja i18n v svojem pipelineu

Napake v prevodih so pri pregledu kode nevidne. Manjkajoč ključ, poškodovana označba mesta ali napačno oblikovana množinska oblika se v diffu ne pokažejo. Preverjanje na ravni CI jih odkrije, preden dosežejo produkcijo.

1

Zakaj se napake v prevodih izmuznejo pregledu kode

Razvijalec v en.json doda 10 novih ključev in posodobi kodo funkcije. Pregledovalec zahteve PR preveri kodo in angleška besedila ter jo odobri. Nihče ne primerja 14 drugih jezikovnih datotek. V produkcijo pridejo tri napake: v de.json manjkata 2 ključa (nemški uporabniki vidijo neobdelane poti ključev), v fr.json je poškodovana označba mesta {count} (francoski uporabniki dobesedno vidijo {count}), v ja.json pa je napačno oblikovana množinska oblika ICU (japonskim uporabnikom se aplikacija sesuje). Te napake lahko preprečite s 30-sekundnim preverjanjem v CI.

Napake v prevodih imajo edinstveno lastnost: ne vidi jih razvijalec, ne vidi jih pregledovalec, vidijo pa jih samo uporabniki določene jezikovne različice. Preverjanje v CI je edini zanesljiv način, da jih odkrijete pred produkcijo.
2

Namestite i18n-validate

i18n-validate dodajte svojemu projektu kot razvojno odvisnost. Že v osnovi podpira oblike JSON, YAML, PO, XLIFF in ARB, za osnovno uporabo pa ne potrebuje nastavitev.

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

Integracija z GitHub Actions

i18n-validate dodajte kot korak delovnega toka za zahteve pull request. Ko orodje najde napake, se konča z izhodno kodo 1 in preverjanje zahteve PR ne uspe. Z izhodom JUnit XML in dejanjem za poročanje o testih dobite sprotne opombe neposredno v diffu zahteve PR.

.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
V delovnem toku pripnite različico i18n-validate, da nova pravila preverjanja ne povzročijo nepričakovanih prekinitev. @latest uporabljajte samo med razvojem.
4

Integracija z GitLab CI

V pipeline .gitlab-ci.yml dodajte opravilo za preverjanje prevodov. GitLab izvorno podpira artefakte JUnit XML: naložite poročilo preverjanja in napake se bodo prikazale na zavihku Test zahteve za združitev.

.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

Hook pre-commit

Za hitrejše povratne informacije zaženite preverjanje kot hook pre-commit. Tako težave odkrijete, še preden dosežejo CI, prihranite čas pipelinea in skrajšate povratne zanke. Hooke upravljajte s Huskyjem (JS) ali pre-commitom (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
Hooki pre-commit se zaženejo pri vsakem commitu, zato morajo biti hitri. Z zastavico --locales preverite samo jezikovne različice, ki so se spremenile v trenutnem commitu, in ne vseh. V večini projektov se tako hook izvede v manj kot 2 sekundah.
6

Nastavitve in ravni resnosti

Delovanje preverjanja prilagodite z nastavitveno datoteko .i18n-validate.toml. Za vsako pravilo nastavite resnost preverjanja (error, warning, off), določite pričakovane jezike, izključite jezikovne različice v pripravi in nastavite obliko izhoda. V CI pipeline prekinejo samo napake; opozorila so prikazana v poročilu, vendar postopka ne ustavijo.

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
}

Preizkusite i18n Agent zdaj

Spustite prevajalsko datoteko sem

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

ali kliknite za izbiro

Ciljni jeziki

Registracija ni potrebnaTakojšnja ocena

Pogosta vprašanja o preverjanju prevodov v CI