i18n Validator
Controleer vertaalbestanden op ontbrekende sleutels, defecte placeholders en inconsistente meervoudsvormen. Eén opdracht. 9 controles. 32 indelingen. Geen configuratie.
Het probleem
Vertaalproblemen blijven onzichtbaar totdat gebruikers ermee te maken krijgen. Bij een ontbrekende sleutel verschijnt een onbewerkt pad zoals "settings.billing.title" in plaats van echte tekst. Een defecte placeholder geeft "{price}" weer als letterlijke tekst in plaats van "€ 9,99". Een onjuist gevormde meervoudsvorm veroorzaakt een crash als het aantal nul is. Deze bugs glippen door de codereview, omdat niemand handmatig de verschillen tussen 15 taalbestanden controleert.
Missing keys
Blank text or key paths shown to users
Broken placeholders
{price} displays as literal text instead of $9.99
Orphaned files
Outdated translations confuse the build system
Malformed files
Runtime crashes when users switch languages
De oplossing
i18n-validate scant al je vertaalbestanden in één keer. De tool detecteert automatisch je mappenstructuur en bestandsindeling, vergelijkt elke taal met de referentie en meldt precies wat er waar mis is. Geen plug-ins, configuratie of aangepaste testcode.
| Check | Severity | What it catches |
|---|---|---|
| missing-keys | error | Key exists in reference but is absent in a translation |
| extra-keys | error | Key exists in translation but not in the reference |
| placeholders | error | {price}, {{name}}, %s differ between languages |
| plural-structure | error | Plural forms are malformed or missing required categories |
| missing-languages | error | Expected language has no files or directory |
| orphaned-languages | error | Language files exist but are not in the expected list |
| parse-errors | error | File fails to parse (broken JSON, XML, YAML, etc.) |
| empty-values | warning | Key is present but the translation is an empty string |
| untranslated | warning | Translation is identical to the reference language |
i18n-validate v0.1.0 — validating ./locales
Reference: en (2 files: translation.json, apiTester.json)
Languages: de, ja, fr, es, zh-Hans, pt-BR, ko (7 found, 7 expected)
Layout : directory (auto-detected)
Formats : i18next JSON (auto-detected)
────────────────────────────────────────────────
ERRORS (5)
✗ missing-keys │ translation.json
Key "settings.billing.title"
missing in: ja, ko
✗ placeholders │ translation.json
Key "pricing.total" — expected: {price}, {currency}
de: found {price} only — missing {currency}
────────────────────────────────────────────────
WARNINGS (2)
⚠ empty-values │ translation.json
Key "onboarding.step3.hint"
empty in: de, fr
────────────────────────────────────────────────
5 errors, 2 warnings across 7 languages
✗ Validation failedInstallatie
Installeer de tool als globale CLI met de pakketbeheerder van je voorkeur. Het npm-pakket bevat een native Rust-binair bestand — compileren en runtimeafhankelijkheden zijn niet nodig.
npm install -g @i18n-agent/i18n-validateGebruik
Verwijs de tool naar je map met taalbestanden. De referentietaal, mappenstructuur en bestandsindeling worden automatisch gedetecteerd. Voor de meeste projecten is geen configuratie nodig.
# Zero-config validation
i18n-validate ./locales
# JSON output for scripting
i18n-validate ./locales --format json | jq '.summary'
# CI/CD with JUnit XML
i18n-validate ./locales --format junit -o i18n-report.xmlCI/CD-integratie
Voeg vertaalvalidatie toe aan je pullrequestpipeline. De tool genereert JUnit XML dat werkt met testrapportages van GitHub Actions, artefacten van GitLab CI en elk CI-systeem dat JUnit ondersteunt.
name: Validate Translations
on:
pull_request:
paths: ['locales/**', 'public/locales/**']
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Validate translations
run: npx @i18n-agent/i18n-validate ./locales --format junit -o i18n-report.xml
- uses: dorny/test-reporter@v1
if: always()
with:
name: i18n validation
path: i18n-report.xml
reporter: java-junit--strict to also fail on warnings.Ondersteunde indelingen
Dankzij i18n-convert ondersteunt de validator standaard 32 i18n-bestandsindelingen. Indelingsspecifieke plug-ins of configuratie zijn niet nodig — de tool detecteert de indeling automatisch aan de hand van bestandsextensies en inhoud.
Mobile & Desktop
Android XML, Xcode String Catalog, iOS Strings, iOS Stringsdict, Flutter ARB, Qt Linguist
Web & Frameworks
Structured JSON, i18next JSON, JSON5, HJSON, YAML (Rails), YAML (Plain), JavaScript, TypeScript, PHP/Laravel, NEON
Standards & Exchange
XLIFF 1.2, XLIFF 2.0, Gettext PO, TMX, .NET RESX, Java Properties
Data & Other
CSV, Excel (.xlsx), TOML, INI, SRT Subtitles, Markdown, Plain Text
Configuratie
Voor de meeste projecten werkt de tool zonder configuratie. Wil je meer controle — bijvoorbeeld de ernst van controles aanpassen, verwachte talen instellen of talen in ontwikkeling uitsluiten — maak dan een .i18n-validate.toml-bestand in de hoofdmap van je project.
# .i18n-validate.toml
ref = "en"
expect = ["de", "ja", "fr", "es", "zh-Hans", "pt-BR", "ko"]
[checks]
missing-keys = "error"
extra-keys = "error"
placeholders = "error"
empty-values = "warning"
untranslated = "warning"
[languages.ko]
missing-keys = "warning" # Korean is WIP
[languages.ar]
skip = true # Exclude from validationProbeer i18n Agent nu
Zet je vertaalbestand hier neer
JSON, YAML, PO, XML, CSV, Markdown, Properties
of klik om een bestand te selecteren
Doeltalen