Validatore i18n
Analizzi i file di traduzione per rilevare chiavi mancanti, segnaposto non validi e incoerenze nei plurali. Un comando. 9 controlli. 32 formati. Senza configurazione.
Il problema
I problemi di traduzione restano invisibili finché non li incontrano gli utenti. Una chiave mancante mostra un percorso non elaborato come "settings.billing.title" anziché il testo corretto. Un segnaposto non valido visualizza "{price}" come testo letterale anziché "9,99 $". Una forma plurale errata causa un arresto anomalo quando il conteggio è zero. Questi errori sfuggono alla revisione del codice perché nessuno confronta manualmente 15 file di lingua.
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 soluzione
i18n-validate analizza tutti i file di traduzione in un unico passaggio. Rileva automaticamente la struttura delle directory e il formato dei file, confronta ogni lingua con quella di riferimento e indica con precisione cosa non va e dove. Senza plugin, configurazione o codice di test personalizzato.
| 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 failedInstallazione
Installi lo strumento CLI a livello globale con il gestore di pacchetti preferito. Il pacchetto npm include un binario Rust nativo: non sono necessarie compilazione o dipendenze di runtime.
npm install -g @i18n-agent/i18n-validateUtilizzo
Indichi allo strumento la directory delle lingue. Rileva automaticamente la lingua di riferimento, la struttura delle directory e il formato dei file. Per la maggior parte dei progetti non serve alcuna configurazione.
# 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.xmlIntegrazione CI/CD
Aggiunga la convalida delle traduzioni alla pipeline delle pull request. Lo strumento genera XML JUnit compatibile con i reporter di test di GitHub Actions, gli artefatti GitLab CI e qualsiasi sistema CI che supporti 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.Formati supportati
Basato su i18n-convert, il validatore supporta 32 formati di file i18n senza configurazione aggiuntiva. Non servono plugin o impostazioni specifici per formato: lo strumento rileva automaticamente il formato dalle estensioni e dal contenuto dei file.
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
Configurazione
Per la maggior parte dei progetti funziona senza configurazione. Quando serve maggiore controllo, per modificare la gravità dei controlli, impostare le lingue previste o escludere quelle in corso di lavorazione, crei un file .i18n-validate.toml nella directory principale del progetto.
# .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 validationProvi subito i18n Agent
Trascinare qui il file di traduzione
JSON, YAML, PO, XML, CSV, Markdown, Properties
oppure fare clic per selezionarlo
Lingue di destinazione