Skip to main content

Provjera prijevoda u CI-ju: automatizirajte i18n provjere u svojem pipelineu

Pogreške u prijevodu ne vide se pri pregledu koda. Ključ koji nedostaje, neispravno rezervirano mjesto ili pogrešno oblikovan množinski izraz ne pojavljuju se u diffu. Provjera na razini CI-ja otkriva ih prije produkcije.

1

Zašto pogreške u prijevodu promaknu pregledu koda

Programer dodaje 10 novih ključeva u en.json i ažurira kôd funkcionalnosti. Osoba koja pregledava PR provjerava kôd i engleske tekstove te ga odobrava. Nitko ne uspoređuje preostalih 14 datoteka lokalizacije. U produkciju stižu tri pogreške: u de.json nedostaju 2 ključa (njemački korisnici vide sirove putanje ključeva), fr.json ima neispravno rezervirano mjesto {count} (francuski korisnici doslovno vide {count}), a ja.json pogrešno oblikovan ICU množinski izraz (japanskim korisnicima aplikacija se ruši). Sve se to može spriječiti CI provjerom koja traje 30 sekundi.

Pogreške u prijevodu posebne su po tome što ih ne vide ni programer ni osoba koja pregledava kôd, nego samo korisnici određene lokalizacije. Provjera u CI-ju jedini je pouzdan način da ih otkrijete prije produkcije.
2

Instalirajte i18n-validate

Dodajte i18n-validate svojem projektu kao razvojnu ovisnost. Odmah podržava formate JSON, YAML, PO, XLIFF i ARB, a za osnovnu upotrebu nije potrebna konfiguracija.

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

Integracija s GitHub Actions

Dodajte i18n-validate kao korak u radnom procesu za pull request. Kada pronađe pogreške, alat završava s izlaznim kodom 1 i ruši PR provjeru. Upotrijebite JUnit XML izlaz i akciju za izvještavanje o testovima kako biste dobili bilješke izravno u diffu PR-a.

.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
Fiksirajte verziju alata i18n-validate u radnom procesu kako nova pravila provjere ne bi neočekivano prouzročila prekide. @latest upotrebljavajte samo u razvoju.
4

Integracija s GitLab CI-jem

Dodajte zadatak provjere prijevoda u svoj .gitlab-ci.yml pipeline. GitLab izvorno podržava JUnit XML artefakte: prenesite izvješće o provjeri i pogreške će se prikazati na kartici Test u merge requestu.

.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

Za brže povratne informacije pokrenite provjeru kao pre-commit hook. Tako ćete otkriti probleme prije CI-ja, uštedjeti vrijeme pipelinea i skratiti ciklus povratnih informacija. Hookovima upravljajte alatom Husky (JS) ili 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
Pre-commit hookovi pokreću se pri svakom commitu, stoga moraju ostati brzi. Oznakom --locales provjerite samo lokalizacije promijenjene u trenutačnom commitu, a ne sve lokalizacije. U većini projekata tako izvršavanje hooka traje kraće od 2 sekunde.
6

Konfiguracija i razine ozbiljnosti

Prilagodite provjeru konfiguracijskom datotekom .i18n-validate.toml. Za svako pravilo odredite razinu (error, warning, off), definirajte očekivane jezike, isključite nedovršene lokalizacije i postavite izlazni format. U CI-ju pipeline ruše samo pogreške; upozorenja se prikazuju u izvješću, ali ga ne blokiraju.

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
}

Isprobajte i18n Agent odmah

Povucite datoteku za prijevod ovdje

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

ili kliknite za odabir

Ciljni jezici

Registracija nije potrebnaProcjena odmah

Česta pitanja o provjeri prijevoda u CI-ju