Traduce archivos Flutter ARB
Un archivo .arb es JSON con mensajes ICU y un bloque @key de metadatos junto a cada cadena. KAERIS traduce los mensajes, conserva los metadatos y verifica la sintaxis ICU después.
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 ARB
JSON simple. Cada mensaje está junto a una entrada @message con su descripción y tipos de marcadores; @@locale nombra el idioma. Los plurales y selectores son cadenas ICU: {count, plural, =0{…} one{…} other{…}}.
{
"@@locale": "en",
"welcome": "Welcome back, {name}!",
"@welcome": {
"description": "Greeting on the home screen",
"placeholders": { "name": { "type": "String" } }
},
"itemCount": "{count, plural, =0{No items} one{{count} item} other{{count} items}}",
"@itemCount": {
"placeholders": { "count": { "type": "int" } }
}
}
Qué vigilar en las traducciones ARB
La sintaxis ICU es código
Una llave perdida o una rama omitida rompe el Dart generado. KAERIS compara los bloques ICU con la fuente y reporta una rama exacta omitida como
=0.Idiomas con más formas plurales
El ruso necesita
fewymanyademás deoneyother; la verificación reporta la forma faltante para los idiomas donde aplica.Los metadatos son para la plantilla, no para la traducción
Las entradas
@key(descripción, tipos de marcadores) se mantienen en la salida;@@localese reescribe para el idioma destino.Los marcadores tienen nombre
El
{name}debe conservar su nombre, porque el generador lo vincula al tipo en el bloque@.
Una ejecución real: traducido al alemán y verificado
Una ejecución real, 27 de octubre de 2026, nada editado a mano: kaeris translate app_en.arb --langs de con kaeris 0.2.35, 2.7 segundos, modelo google/gemini-2.5-flash-lite, el predeterminado gratuito. Abajo, el archivo alemán que escribió y lo que kaeris check dice sobre él.
{
"@@locale": "de",
"welcome": "Willkommen zurück, {name}!",
"itemCount": "{count, plural, =0{Keine Artikel} one{{count} Artikel} other{{count} Artikel}}",
"@welcome": {
"description": "Greeting on the home screen",
"placeholders": {
"name": {
"type": "String"
}
}
},
"@itemCount": {
"placeholders": {
"count": {
"type": "int"
}
}
}
}
$ kaeris check --source app_en.arb --langs de ✓ de: complete & placeholder-safe ✓ all locales complete & placeholder-safe
Lo que KAERIS hace con él
Metadatos conservados, locale reescrito
Los bloques
@keyse mantienen;@@localese ajusta según el idioma destino.ICU verificado
Ramas perdidas, variables perdidas y daños en llaves son detectados por la misma verificación que ejecuta el sitio web.
Solo las claves nuevas
--only-newfunciona para ARB: se traducen claves editadas y nuevas, el resto se reutiliza. Preajustes:kaeris init --preset flutter-arb.Verificación en terminal
kaeris checklee fuentes ARB directamente, sin clave.
Ejecuta en tres pasos
Instala el CLI
Ejecuta
pip install kaeris.Traduce la plantilla
Ejecuta
kaeris translate lib/l10n/app_en.arb --langs de,ja.Verifica el resultado
Ejecuta
kaeris checkcon la fuente y--pattern 'app_{lang}.arb'; sale con código 1 si hay una variable rota o bloque ICU dañado.
pip install kaeris
kaeris init --preset flutter-arb
kaeris translate lib/l10n/app_en.arb --langs de,ja --verify
kaeris check --source lib/l10n/app_en.arb --langs de,ja --pattern 'app_{lang}.arb'
Preguntas
¿Se conservan las entradas @metadata?
Sí. Las descripciones y tipos de marcadores permanecen junto a cada mensaje; @@locale se reescribe para el idioma destino.
¿Qué pasa si el plural ICU está mal en una traducción?
La verificación compara los bloques ICU con la fuente y nombra el problema, por ejemplo una rama =0 omitida. En la ejecución real arriba el plural regresó con las tres ramas y la verificación no reportó nada.
¿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 lib/l10n/app_en.arb --langs de,ja. Véase también Flutter. El 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: JSON · YAML · .po · XLIFF · .strings · .xcstrings · .properties · .resx · CSV · Markdown · Fluent · Android XML