Skip to main content

CI Translation Validation: I-automate ang i18n Check sa Inyong Pipeline

Hindi nakikita ang mga translation bug sa code review. Ang nawawalang key, sirang placeholder, o mali ang plural — wala sa diff ang mga ito. Nahuhuli ng CI-level validation ang mga ito bago makarating sa production.

1

Bakit Nakakalusot ang Mga Translation Bug sa Code Review

Nagdagdag ang developer ng 10 bagong key sa en.json at in-update ang feature code. Sinusuri ng PR reviewer ang code, tinitiyak ang mga English string, at inaaprubahan. Walang nagdi-diff sa 14 pang locale file. Tatlong bug ang naipapadala sa production: may 2 key na nawawala sa de.json (nakikita ng mga German user ang raw key path), may sirang {count} placeholder sa fr.json (nakikita ng mga French user ang literal na {count}), at may malformed ICU plural sa ja.json (nagka-crash ang mga Japanese user). Maiiwasan ang mga ito gamit ang 30-segundong CI check.

May natatanging katangian ang mga translation bug: hindi nakikita ng developer, hindi nakikita ng reviewer, at nakikita lang ng mga user sa isang partikular na locale. Ang CI validation ang tanging maaasahang paraan para mahuli ang mga ito bago production.
2

I-install ang i18n-validate

Idagdag ang i18n-validate sa inyong proyekto bilang dev dependency. Sinusuportahan nito ang JSON, YAML, PO, XLIFF, at ARB format out of the box — walang configuration na kailangan para sa basic na paggamit.

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

Integration sa GitHub Actions

Idagdag ang i18n-validate bilang isang step sa inyong pull request workflow. Nag-e-exit ang tool na may code 1 kapag may nakitang mga error, kaya bumabagsak ang PR check. Gamitin ang JUnit XML output kasama ang test reporter action para makakuha ng inline annotation direkta sa PR diff.

.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
I-pin ang bersyon ng i18n-validate sa inyong workflow para maiwasan ang mga hindi inaasahang break mula sa mga bagong validation rule. Gamitin ang @latest sa development lang.
4

Integration sa GitLab CI

Magdagdag ng translation validation job sa inyong .gitlab-ci.yml pipeline. Native na sinusuportahan ng GitLab ang JUnit XML artifact — i-upload ang validation report at lalabas ang mga error sa Test tab ng merge request.

.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

Para sa mas mabilis na feedback, patakbuhin ang validation bilang pre-commit hook. Nahuhuli nito ang mga isyu bago pa makarating sa CI, nakakatipid sa oras ng pipeline at nagpapapaikli ng feedback loop. Gamitin ang Husky (JS) o pre-commit (Python) para pamahalaan ang mga hook.

.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
Tumatakbo ang mga pre-commit hook sa bawat commit, kaya panatilihing mabilis ang mga ito. Gamitin ang --locales flag para i-validate lang ang mga locale na nagbago sa kasalukuyang commit, sa halip na lahat ng locale. Pinananatili nitong mas mababa sa 2 segundo ang hook execution para sa karamihan ng proyekto.
6

Configuration at Mga Antas ng Severity

I-customize ang behavior ng validation gamit ang .i18n-validate.toml configuration file. Itakda ang check severity (error, warning, off) kada rule, tukuyin ang mga inaasahang wika, i-exclude ang mga WIP locale, at i-configure ang output format. Sa CI, mga error lang ang bumabagsak sa pipeline — lumalabas ang mga warning sa report pero hindi nagba-block.

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
}

Subukan ang i18n Agent Ngayon

I-drop dito ang inyong translation file

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

o i-click para mag-browse

Mga target language

Hindi kailangan ang signupInstant na estimate

FAQ sa CI Translation Validation