Skip to main content
Open Source CLI Tool

i18n Validator

Détectez les clés manquantes, les espaces réservés cassés et les incohérences de pluriels dans vos fichiers de traduction. Une seule commande. 9 vérifications. 32 formats. Aucune configuration.

9 checks 32 formats Zero config Native Rust binary

Le problème

Une clé manquante affiche un chemin brut comme "settings.billing.title" au lieu du texte réel. Un espace réservé cassé affiche "{price}" tel quel au lieu de "$9.99". Un pluriel mal formé provoque un plantage lorsque le nombre est égal à zéro. Ces bugs passent inaperçus lors des revues de code, car personne ne compare manuellement 15 fichiers de locales.

🔑

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

La plupart des outils de validation sont spécifiques à un format (JSON uniquement, YAML uniquement) et nécessitent du code de test personnalisé pour chaque projet. Les bugs de traduction ne sont souvent détectés qu'à l'exécution, lorsque les utilisateurs voient une interface cassée.

La solution

i18n-validate analyse tous vos fichiers de traduction en une seule passe. Il détecte automatiquement la structure de vos répertoires et le format de fichier, compare chaque langue à la langue de référence, et indique précisément ce qui ne va pas et où. Aucun plugin, aucune configuration, aucun code de test personnalisé.

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

Installation

Installez-le comme outil CLI global avec le gestionnaire de paquets de votre choix. Le paquet npm inclut un binaire natif Rust — aucune compilation ni dépendance d'exécution requise.

Terminal
npm install -g @i18n-agent/i18n-validate
Le paquet npm inclut un binaire natif précompilé pour macOS, Linux et Windows. Aucune chaîne d'outils Rust n'est nécessaire.

Utilisation

Indiquez à l'outil le chemin de votre répertoire de locales. Il détecte automatiquement la langue de référence, la structure des répertoires et le format de fichier. Aucune configuration n'est nécessaire pour la plupart des projets.

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

Intégration CI/CD

Ajoutez la validation des traductions à votre pipeline de pull requests. L'outil génère un rapport JUnit XML compatible avec les rapporteurs de tests GitHub Actions, les artefacts GitLab CI et tout système CI prenant en charge JUnit.

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

Formats pris en charge

Propulsé par i18n-convert, le validateur prend en charge 32 formats de fichiers i18n dès l'installation. Aucun plugin ni configuration spécifique au format n'est nécessaire — l'outil détecte automatiquement le format à partir de l'extension et du contenu du fichier.

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

Configuration

Pour la plupart des projets, l'absence de configuration suffit. Si vous avez besoin de plus de contrôle — modifier la sévérité d'une vérification, définir les langues attendues ou exclure les langues en cours de traduction — créez un fichier .i18n-validate.toml à la racine de votre projet.

.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

Essayez i18n Agent maintenant

Déposez votre fichier de traduction ici

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

ou cliquez pour parcourir

Langues cibles

Aucune inscription requiseEstimation instantanée

Questions fréquentes