Validador de i18n
Analice archivos de traducción para detectar claves ausentes, marcadores rotos e incoherencias de plural. Un comando. 9 comprobaciones. 32 formatos. Sin configuración.
El problema
Los problemas de traducción son invisibles hasta que afectan a los usuarios. Una clave ausente muestra una ruta sin procesar como «settings.billing.title» en vez de texto real. Un marcador roto renderiza «{price}» como texto literal en vez de «9,99 €». Un plural mal formado provoca un bloqueo cuando el número es cero. Estos errores escapan a la revisión porque nadie compara manualmente 15 archivos regionales.
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 solución
i18n-validate analiza todos sus archivos de traducción en una sola pasada. Detecta automáticamente la disposición de directorios y el formato, compara cada idioma con la referencia e indica exactamente qué está mal y dónde. Sin plugins, configuración ni código de prueba personalizado.
| 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 failedInstalación
Instálelo como herramienta de CLI global mediante el gestor de paquetes que prefiera. El paquete npm incluye un binario nativo de Rust, sin necesidad de compilar ni instalar dependencias de ejecución.
npm install -g @i18n-agent/i18n-validateUso
Indique a la herramienta el directorio de configuraciones regionales. Detectará automáticamente el idioma de referencia, la disposición de directorios y el formato. La mayoría de los proyectos no requiere configuración.
# 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.xmlIntegración con CI/CD
Añada la validación de traducciones al proceso de solicitudes de incorporación. La herramienta genera XML JUnit compatible con los informes de pruebas de GitHub Actions, los artefactos de GitLab CI y cualquier sistema de CI que admita 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.Formatos admitidos
Gracias a i18n-convert, el validador admite de serie 32 formatos de archivo i18n. No necesita plugins ni configuraciones específicos: detecta automáticamente el formato por la extensión y el contenido.
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
Configuración
En la mayoría de los proyectos funciona sin configuración. Si necesita más control —cambiar la gravedad de las comprobaciones, definir los idiomas esperados o excluir idiomas en curso—, cree un archivo .i18n-validate.toml en la raíz.
# .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 validationPruebe i18n Agent ahora
Arrastre y suelte aquí su archivo de traducción
JSON, YAML, PO, XML, CSV, Markdown, Properties
o haga clic para seleccionar
Idiomas de destino