Skip to main content
Open Source CLI Tool

i18n Validator

Controleer vertaalbestanden op ontbrekende sleutels, defecte placeholders en inconsistente meervoudsvormen. Eén opdracht. 9 controles. 32 indelingen. Geen configuratie.

9 checks 32 formats Zero config Native Rust binary

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 meeste validatietools zijn gebonden aan één indeling (alleen JSON of alleen YAML) en vereisen aangepaste testcode voor elk project. Vertaalfouten worden vaak pas tijdens runtime ontdekt, wanneer gebruikers een defecte interface te zien krijgen.

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.

CheckSeverityWhat it catches
missing-keyserrorKey exists in reference but is absent in a translation
extra-keyserrorKey exists in translation but not in the reference
placeholderserror{price}, {{name}}, %s differ between languages
plural-structureerrorPlural forms are malformed or missing required categories
missing-languageserrorExpected language has no files or directory
orphaned-languageserrorLanguage files exist but are not in the expected list
parse-errorserrorFile fails to parse (broken JSON, XML, YAML, etc.)
empty-valueswarningKey is present but the translation is an empty string
untranslatedwarningTranslation is identical to the reference language
Terminal output
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 failed

Installatie

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.

Terminal
npm install -g @i18n-agent/i18n-validate
Het npm-pakket bevat een vooraf gecompileerd native binair bestand voor macOS, Linux en Windows. Je hebt geen Rust-toolchain nodig.

Gebruik

Verwijs de tool naar je map met taalbestanden. De referentietaal, mappenstructuur en bestandsindeling worden automatisch gedetecteerd. Voor de meeste projecten is geen configuratie nodig.

Terminal
# 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.xml

CI/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.

.github/workflows/validate-i18n.yml
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
The tool exits with code 1 when errors are found, so it naturally fails CI. Use --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
# .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 validation

Probeer i18n Agent nu

Zet je vertaalbestand hier neer

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

of klik om een bestand te selecteren

Doeltalen

Geen registratie nodigDirecte prijsindicatie

Veelgestelde vragen