Skip to main content
Open Source CLI Tool

Validator i18n

Verificați fișierele de traducere pentru chei lipsă, substituenți nevalizi și inconsecvențe ale pluralului. O singură comandă. 9 verificări. 32 de formate. Nicio configurare.

9 checks 32 formats Zero config Native Rust binary

Problema

Problemele de traducere rămân invizibile până când sunt întâlnite de utilizatori. O cheie lipsă afișează o cale brută precum „settings.billing.title” în locul unui text real. Un substituent deteriorat afișează „{price}” ca text literal în loc de „9,99 $”. O formă de plural incorectă blochează aplicația atunci când numărul este zero. Aceste erori trec neobservate la revizuirea codului, deoarece nimeni nu compară manual 15 fișiere de limbă.

🔑

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

Majoritatea instrumentelor de validare sunt dedicate unui anumit format (doar JSON sau doar YAML) și necesită cod de testare personalizat pentru fiecare proiect. Erorile de traducere sunt adesea depistate abia în timpul execuției, când utilizatorii văd o interfață defectă.

Soluția

i18n-validate scanează toate fișierele dumneavoastră de traducere dintr-o singură trecere. Detectează automat structura directoarelor și formatul fișierelor, compară fiecare limbă cu limba de referință și indică exact problema și locul acesteia. Fără extensii, configurare sau cod de testare personalizat.

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

Instalare

Instalați instrumentul CLI la nivel global folosind managerul de pachete preferat. Pachetul npm include un fișier binar nativ scris în Rust — nu sunt necesare compilarea sau dependențele de execuție.

Terminal
npm install -g @i18n-agent/i18n-validate
Pachetul npm include un fișier binar nativ precompilat pentru macOS, Linux și Windows. Nu este necesar setul de instrumente Rust.

Utilizare

Indicați instrumentului directorul cu fișierele de limbă. Acesta detectează automat limba de referință, structura directoarelor și formatul fișierelor. Pentru majoritatea proiectelor nu este necesară nicio configurare.

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

Integrarea CI/CD

Adăugați validarea traducerilor în fluxul solicitărilor dumneavoastră de integrare. Instrumentul generează rezultate JUnit XML compatibile cu rapoartele de testare GitHub Actions, artefactele GitLab CI și orice sistem CI care acceptă 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.

Formate acceptate

Bazat pe i18n-convert, validatorul acceptă implicit 32 de formate de fișiere i18n. Nu sunt necesare extensii sau configurări specifice formatului — instrumentul detectează automat formatul după extensia și conținutul fișierelor.

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

Configurare

Pentru majoritatea proiectelor funcționează fără configurare. Dacă aveți nevoie de mai mult control — pentru a modifica severitatea verificărilor, a stabili limbile așteptate sau a exclude limbile în curs de elaborare — creați un fișier .i18n-validate.toml în directorul rădăcină al proiectului.

.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

Încercați acum i18n Agent

Plasați aici fișierul de traducere

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

sau faceți clic pentru a-l selecta

Limbi țintă

Nu este necesară înregistrareaEstimare instantanee

Întrebări frecvente