Traducir archivos de locales i18next y JSON
El JSON de locales está anidado y sus cadenas contienen variables como {{name}}. Una herramienta que solo ve texto puede renombrar una clave, aplanar la anidación o traducir la variable. KAERIS devuelve el archivo con la misma estructura, con cada variable en su lugar original.
KAERIS ha traducido esta página y revisado cada línea traduciéndola de vuelta. Un hablante nativo aún no la ha revisado. Original en inglés
Cómo se construye un archivo JSON de locales
Un archivo por idioma (en.json, de.json) o uno por espacio de nombres (locales/en/common.json). Las claves son el contrato con tu código, por lo que solo se traducen los valores. i18next escribe las formas plurales como claves separadas (inbox_one, inbox_other); next-intl, Vue I18n y FormatJS las incluyen en una sola cadena ICU.
{
"nav": { "greeting": "Welcome back, {{name}}!" },
"inbox_one": "{{count}} new message",
"inbox_other": "{{count}} new messages"
}
Qué tener en cuenta en las traducciones JSON
Variables en tres formatos
{{name}}en i18next,{name}en bibliotecas estilo ICU,%so${x}en otros. Si falta alguna, aparece en la app en ejecución como un espacio en blanco, no como un error.Los plurales requieren más formas en algunos idiomas
El inglés tiene dos formas. Ruso, polaco y árabe necesitan de tres a seis. Con cadenas ICU, la verificación gratuita señala la falta de alguna forma para ru, uk, pl, cs, sk, hr, sr, lt, ro, ar, lv, sl y he, y una rama exacta omitida como
=0. Con sufijos de claves i18next, tu archivo necesita las claves adicionales que el idioma requiere; KAERIS traduce las claves que encuentra.Referencias y marcado dentro de un valor
i18next
$t(nav.cart), vue-i18n@:nav.shop, etiquetas<0>…</0>del componente Trans y HTML plano deben conservarse. El ejemplo abajo muestra una pérdida real de este tipo.Notas para ti mismo
Una clave cuyo camino tiene un segmento que empieza con
_(_comment,_status) se trata como clave de servicio y no se traduce por defecto en JSON, YAML y ARB.
Una ejecución real, antes y después
Una ejecución real: nuestro archivo de prueba de 97 cadenas, alemán, 26 de octubre de 2026, reducido a cuatro claves. La última línea muestra una pérdida que la verificación detectó en esa ejecución.
{
"ph": {
"mustache": "Hi {{firstName}}, your order {{orderId}} has shipped.",
"reactTrans": "By continuing you accept our <0>Terms</0> and <1>Privacy Policy</1>.",
"nesting": "$t(nav.cart) has been updated"
},
"icu": {
"copiesLeft": "{count, plural, =0 {Sold out} one {Only # copy left} other {Only # copies left}}"
}
}
{
"ph": {
"mustache": "Hallo {{firstName}}, Ihre Bestellung {{orderId}} wurde versendet.",
"reactTrans": "Durch die fortgesetzte Nutzung stimmen Sie unseren <0>Nutzungsbedingungen</0> und <1>Datenschutzrichtlinien</1> zu.",
"nesting": "Der Warenkorb wurde aktualisiert"
},
"icu": {
"copiesLeft": "{count, plural, =0 {Ausverkauft} one {Nur noch # Exemplar} other {Nur noch # Exemplare}}"
}
}
error ph.nesting: lost placeholder $t(nav.cart)
Lo que KAERIS hace con él
Mismo archivo, misma estructura
Las claves, la anidación y el orden permanecen como en tu archivo fuente; solo cambian los valores. Funciona con archivos i18next, Vue I18n, next-intl y FormatJS.
Variables contadas sin IA
Después de la traducción, una verificación simple compara cada variable y etiqueta con el original. Una línea que perdió alguna se marca y se muestra arriba.
Cada línea traducida de vuelta
Con
--verifycada resultado se traduce de nuevo a tu idioma y un segundo modelo juzga si el significado cambió. Lees lo que ahora dice cada línea.Solo las claves nuevas
kaeris translate --only-newtraduce claves nuevas y editadas;kaeris.lockjunto a la fuente recuerda el resto. JSON y ARB.
Ejecuta en tres pasos
Instala el CLI
Ejecuta
pip install kaeris. No se necesita cuenta para los límites gratuitos.Traduce el archivo
Ejecuta
kaeris translate en.json --langs de,ja --verify. Los archivosde.jsonyja.jsonaparecen junto a la fuente.Verifica el resultado
Ejecuta
kaeris check --source en.json --langs de,ja. Sale con código 1 si una variable, número o clave está mal, para que CI pueda detener la fusión.
pip install kaeris kaeris init --preset i18next kaeris translate en.json --langs de,ja --verify kaeris check --source en.json --langs de,ja
Preguntas
¿Qué formatos JSON funcionan?
Archivos planos y anidados de clave-valor, usados por i18next, Vue I18n, next-intl y FormatJS. El nivel superior debe ser un objeto, como {"greeting": "Hello"}. También se traducen arrays de cadenas.
¿Conserva las referencias {{count}} y $t(…)?
Las variables y referencias se comparan con la fuente tras la traducción. Una línea que pierde alguna se marca; el ejemplo arriba muestra una ejecución real donde se perdió $t(nav.cart) y la verificación lo detectó.
¿Es gratis?
Sí, sin cuenta: 10.000 caracteres por archivo y hasta 8 idiomas por ejecución. Una clave API gratuita eleva el límite de archivos a 50.000 caracteres. La licencia vitalicia cuesta $79 una vez, con tu propia clave OpenRouter; los planes mensuales empiezan en $19. Precios
¿Puedo ejecutarlo desde la terminal o en CI?
Sí. pip install kaeris, luego kaeris translate en.json --langs de,ja. La GitHub Action ejecuta la misma traducción en un pull request. Documentación CLI · GitHub Action
Seguir adelante
Referencia CLI · Referencia de verificación · Traducir en el navegador · Verificación gratuita · Convertir formatos · Pseudo-localización
Otros formatos: YAML · .po · ARB · XLIFF · .strings · .xcstrings · .properties · .resx · CSV · Markdown · Fluent · Android XML