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.
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
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.
| 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 failedInstalare
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.
npm install -g @i18n-agent/i18n-validateUtilizare
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.
# 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.xmlIntegrarea 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.
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.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
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ă