
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.
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.
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.
npm install --save-dev @anthropic/i18n-validateIntegration 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
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.xmlIntegration 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
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/**/*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
#!/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
fiConfiguration 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
{
"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