Skip to main content

CI-validering af oversættelser: Automatiser i18n-kontroller i din pipeline

Oversættelsesfejl er usynlige under kodegennemgang. En manglende nøgle, en ødelagt pladsholder eller en forkert formateret flertalsform – ingen af delene vises i en diff. Validering på CI-niveau finder dem, før de når produktion.

1

Hvorfor oversættelsesfejl slipper gennem kodegennemgangen

En udvikler føjer 10 nye nøgler til en.json og opdaterer funktionskoden. PR-gennemgåeren kontrollerer koden, bekræfter de engelske strenge og godkender. Ingen sammenligner de 14 andre landestandardfiler. Tre fejl når produktion: de.json mangler 2 nøgler (tyske brugere ser rå nøglestier), fr.json har en ødelagt {count}-pladsholder (franske brugere ser den bogstavelige tekst {count}) og ja.json har en forkert formateret ICU-flertalsform (japanske brugere oplever et nedbrud). De kan forhindres med en CI-kontrol på 30 sekunder.

Oversættelsesfejl har en særlig egenskab: De er usynlige for udvikleren og gennemgåeren og kun synlige for brugere i en bestemt landestandard. CI-validering er den eneste pålidelige måde at finde dem før produktion.
2

Installer i18n-validate

Føj i18n-validate til dit projekt som en udviklingsafhængighed. Det understøtter som standard formaterne JSON, YAML, PO, XLIFF og ARB – grundlæggende brug kræver ingen konfiguration.

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

Integration med GitHub Actions

Tilføj i18n-validate som et trin i din pull request-arbejdsgang. Værktøjet afslutter med kode 1, når det finder fejl, så PR-kontrollen mislykkes. Brug JUnit XML-output sammen med en testreporterhandling for at få indlejrede annoteringer direkte i PR-diffen.

.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
Fastlås versionen af i18n-validate i din arbejdsgang for at undgå uventede fejl fra nye valideringsregler. Brug kun @latest under udvikling.
4

Integration med GitLab CI

Føj et job til validering af oversættelser til din .gitlab-ci.yml-pipeline. GitLab understøtter JUnit XML-artefakter direkte – upload valideringsrapporten, så fejlene vises på fanen Test i merge requesten.

.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

Pre-commit-hook

Kør valideringen som et pre-commit-hook for at få hurtigere feedback. Det finder problemer, før de overhovedet når CI, hvilket sparer pipelinetid og forkorter feedbackprocessen. Brug Husky (JS) eller pre-commit (Python) til at administrere hooks.

.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
Pre-commit-hooks kører ved hvert commit, så hold dem hurtige. Brug flaget --locales til kun at validere de landestandarder, der er ændret i det aktuelle commit, i stedet for alle landestandarder. Det holder hookets kørselstid under 2 sekunder for de fleste projekter.
6

Konfiguration og alvorsgrader

Tilpas valideringen med konfigurationsfilen .i18n-validate.toml. Angiv kontrollernes alvorsgrad (error, warning, off) pr. regel, definer forventede sprog, udeluk igangværende landestandarder og konfigurer outputformatet. I CI er det kun fejl, der får pipelinen til at fejle – advarsler vises i rapporten, men blokerer ikke.

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
}

Prøv i18n Agent nu

Slip din oversættelsesfil her

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

eller klik for at vælge en fil

Målsprog

Kræver ingen tilmeldingEstimat med det samme

Ofte stillede spørgsmål om CI-validering af oversættelser