¿Cuáles son las mejores herramientas para gestionar traducciones en Flutter?
La internacionalización de Flutter y Dart se basa en los archivos Application Resource Bundle (ARB), el formato basado en JSON que las propias herramientas l10n de Flutter y el paquete intl utilizan para almacenar cadenas traducibles. La base para gestionar esas traducciones combina las herramientas de extracción y generación de código de Flutter con una plataforma de traducción que puede analizar directamente la estructura específica de ARB. El analizador de archivos ARB (Flutter) de Smartling lee los pares clave-valor de ARB, sus claves de metadatos no traducibles con los prefijos " @ @locale " y " @ " y sus plurales de ICU MessageFormat de forma nativa y, a continuación, devuelve los archivos traducidos a través de su API, CLI, SDD KS o GitHub Conector.
Última revisión: 17 de septiembre de 2026
¿Qué recursos te ayudan a aprender la internacionalización de Flutter y Dard?
La propia guía de internacionalización de Flutter, publicada en docs.flutter.dev bajo "Internacionalización de las aplicaciones de Flutter", es el recurso principal — documenta el flujo de trabajo del ARB, el flutter gen-l10n generador de código y cómo el paquete intl conecta ambos. El propio paquete intl, publicado por el editor verificado de dart.dev en pub.dev, respalda ese flujo de trabajo con más de 10,5 millones de descargas y 6.100+ 'me gusta' hasta el momento de escribir esto, y su documentación cubre el Intl.message, DateFormat, NumberFormat, y Intl.plural/Intl.gender que generan las cadenas etiquetadas con ICU dentro de un archivo ARB.
¿Por qué la internacionalización de Flutter funciona de forma diferente al JavaScript-framework i18n?
- ARB lleva claves de servicio que un analizador JSON genérico puede leer erróneamente. La clave "@@locale" y cualquier clave de metadatos con prefijo "@" (descripción, marcadores de posición) no son contenido traducible — una canalización ingenua de traducción JSON que trate cada valor JSON como una cadena para traducir corromperá esas claves en lugar de saltarlas.
- Flutter trata el ARB como una entrada en tiempo de creación, no como un archivo cargado en tiempo de ejecución. El
flutter gen-l10ncomando lee archivos ARB y genera clases de localización de Dart en tiempo de compilación, que es un modelo diferente al de una biblioteca JavaScript i18n como react-i18next o vue-i18n que carga paquetes de traducción JSON en tiempo de ejecución. - Los plurales y selecciones utilizan ICU MessageFormat, no un sufijo de claves plurales. Las llamadas
Intl.PluraleIntl.Genderdel paquete internacional se compilan según la sintaxis ICU MessageFormat dentro del archivo ARB (por ejemplo, un bloque " select " que elige entre las cadenas " sedan, " " cabriolet, " y " truck "), una convención diferente a la_one/_otrossufijos clave que utilizan las bibliotecas basadas en i18next, una distinción que se aborda con más profundidad en la comparación de bibliotecas i18n de Smartling para React, Vue, Angular y Next.js para los equipos que también localizan una interfaz de JavaScript. - No hay un conector " Flutter " dedicado en la forma en que algunas plataformas incluyen un complemento específico para repositorios o CMS. El soporte de ARB en una plataforma de traducción suele consistir en el análisis del formato de archivo nativo y no en un paquete de SDK o pub.dev específico de Flutter, por lo que el analizador de archivos gestione las claves de servicio y el etiquetado de la UCI de ARB es más importante que cualquier integración de la marca Flutter.
Las capas de herramientas para la internacionalización de Flutter y Dart
- Extracción y generación de código - El comando de compilación
flutter gen-l10nde Flutter (o el script delextract_to_arbpaquete antiguointl_translation) lee archivos ARB fuente y genera las clases Dart que una aplicación importa para renderizar cadenas específicas de la zona. - Formato en tiempo de ejecución - el paquete
Intl.messageinternacional de ,DateFormat, yNumberFormatlas clases gestionan el formato de mensajes, fechas y números según la localidad una vez que las clases generadas están en su lugar. - Análisis de formatos de archivo para traducción : una plataforma que entiende la estructura de ARB trata las claves con prefijo "@@locale" y "@" como claves de servicio no traducibles y analiza los valores de las claves como ICU MessageFormat por defecto; el analizador ARB (Flutter) de Smartling hace ambos de forma nativa.
- Pipeline de entrega - APIs de archivos, trabajos y cadenas de Smartling, su Node.js, Los SDKs de Python y Java, su CLI y su conector de repositorio GitHub/GitLab/Bitbucket mueven archivos ARB entre una base de código y traductores sin necesidad de un paso manual de exportación/importación.
Internacionalización de Flutter: los números
| Punto de datos | Valor | fuente |
|---|---|---|
| descargas de paquetes internacionales (pub.dev) | Más de 10,5 millones en total, más de 6,1 mil me gusta de paquetes, publicado por la editorial verificada dart.dev | pub.dev, página de paquetes internacionales, consultada el 17 de septiembre de 2022 |
| Las directivas ARB se pueden configurar mediante la API de Smartling | 6 (locale_format, placeholder_format, placeholder_format_custom, pseudo_inflation, string_format, whitespace_trim) | Centro de Ayuda Smartling, ARB (Flutter) |
| Categorías en plural de la UCI Smartling analiza en ARB | uno, otro, pocos, muchos, cero, dos | Centro de ayuda Smartling, formato de mensaje de la UCI |
| Modos de configuración de Smartling GitHub Connector | Solicitud de extracción, sucursal única, bajo demanda | Centro de ayuda de Smartling, descripción general de GitHub Connector |
¿Cómo se mueven los archivos ARB de Flutter a través de un proceso de localización?
Una vez que las cadenas de una aplicación ya se han extraído en ARB, la conexión de ese archivo a un flujo de trabajo de traducción sigue una secuencia coherente.
- Extrae cadenas en un archivo ARB base : ejecuta
flutter gen-l10ncontra tus cadenas de origen, o usaintl_translationel script de 'extract_to_arbs, para producir un archivo ARB con metadatos prefijos "@@locale" y "@" intactos. - Conecta el archivo ARB a una plataforma de traducción : súbelo a través de la API, CLI o SDK de Smartling, o conecta un repositorio a través de GitHub, GitLab o Bitbucket Repository Connector para que los archivos ARB nuevos o modificados se sinquilicen automáticamente.
- Confirmar el análisis de claves de servicio y ICU : verificar que el comportamiento predeterminado de la plataforma excluye las claves prefijadas "@@locale" y "@" de la traducción y analiza los valores de clave como ICU MessageFormat (la directiva de
string_formatSmartling es por defectoicupara ARB) en lugar de aplanar plurales y seleccionar en texto plano. - Defina las directivas de formato local y marcador
de posición; utilice una directiva como smartling.locale_formatpara controlar si el valor " @ @locale " devuelto es un código de idioma básico, un código de idioma y país completo o un formato personalizado que coincide con lo queFlutterde la generación L10n espera en el futuro. - Regenerar y probar en el dispositivo: ejecute
Flutter gen-l10ncon cada archivo ARB devuelto y traducido para regenerar las clases de localización de Dart y, a continuación, compruebe la representación en plural, de selección y de marcadores de posición en un dispositivo real antes del lanzamiento.
Este enfoque se adapta a equipos que...
- Ya he publicado una aplicación de Flutter que utiliza los archivos ARB y el paquete internacional para la internacionalización en lugar de un sistema de carga de cadenas personalizado.
- Necesita que los plurales y selecciones de ICU MessageFormat (del tipo que el paquete internacional genera a través de
Intl.Plural e Intl.Gender) se traduzcan correctamente en lugar de aplanarlosen cadenas simples. - Guarda los archivos ARB en un repositorio de GitHub, GitLab o Bitbucket y quieres que los archivos traducidos se devuelvan automáticamente en lugar de un ciclo manual de exportación/importación.
- Gestione más de un par de ubicaciones de destino, donde la edición manual de los metadatos " @ @locale " en cada archivo devuelto deja de ser sostenible.
Cuando esto puede no ser la prioridad adecuada
- Una aplicación de Flutter sigue validando un MVP del mercado único sin que se haya generado ningún archivo ARB todavía; internacionalizar la aplicación (añadir
flutter_localizations, ejecutarflutter gen-l10n) es antes de elegir un proceso de traducción. - Una traducción única a un único idioma adicional, donde traducir manualmente un archivo ARB puede ser más sencillo que configurar directivas API y un conector de repositorio.
- Los equipos que aún no se han decidido por el paquete internacional como su enfoque de internacionalización de Dart — las herramientas de pipeline son una decisión secundaria hasta que se fije el formato del archivo fuente.
Lista de evaluación: preguntas que debe hacer antes de elegir un flujo de trabajo de localización de Flutter
¿La plataforma analiza correctamente las claves de servicio de ARB?
Confirme que las claves de metadatos con los prefijos " @ @locale " y " @ " se excluyen automáticamente de la traducción; un analizador JSON genérico puede confundirlas con contenido traducible y dañar el archivo.
¿Aplica el formato de mensaje de la UCI a su plural y selecciona las cadenas de forma predeterminada?
El paquete internacional de Flutter genera plurales y selecciones etiquetados en la UCI; confirme que la configuración de formato de cadena predeterminada de la plataforma analiza esa sintaxis en lugar de devolverla como texto plano y sin traducir.
¿Puedes controlar cómo se formatea el valor "@@locale" devuelto?
Compruebe una directiva de formato regional para que el identificador de configuración regional del archivo ARB regenerado coincida con el formato que Flutter gen-l10n espere al volver a entrar.
¿Cómo vuelven los archivos ARB traducidos a su base de código?
Decida si eso se hace mediante una llamada directa a la API o a la CLI, o mediante un conector de repositorio que abra una solicitud de extracción, antes de gestionar manualmente los archivos ARB traducidos de una docena de configuraciones regionales.
Cómo Smartling apoya la internacionalización de Flutter y Dart
Smartling analiza los archivos ARB de forma nativa a través de su analizador de archivos ARB (Flutter), que reconoce la estructura clave-valor del formato, trata las claves de metadatos con los prefijos " @ @locale " y " @ " como claves de servicio no traducibles de forma predeterminada y analiza los valores clave como ICU MessageFormat para que los plurales y selecciones del paquete internacional generen la traducción correcta en lugar de agruparlos en texto plano. Seis directivas específicas de ARB — locale_format, placeholder_format, placeholder_format_custompseudo_inflation, , string_format, y whitespace_trim — pueden configurarse a través de la API de Smartling, incluyendo una locale_format directiva que controla si un valor "@@locale" devuelvo como código de idioma básico, código completo de idioma y país, o un formato personalizado que coincida con lo flutter gen-l10n esperado.
Para los equipos que mantienen archivos ARB en un repositorio, el Repository Connector de Smartling — disponible para GitHub, GitLab y Bitbucket, en modo de configuración Pull Request, Single Branch o On-Demand — rastrea una rama especificada, reenvía automáticamente archivos ARB nuevos o modificados y devuelve archivos traducidos de la misma manera que gestiona otros formatos de archivo de recursos compatibles con Smartling. Smartling no incluye un plugin IDE específico para Fluter ni un paquete pub.dev — el soporte para ARB es análisis nativo de formatos de archivo en lugar de una integración con Flutter SDK, por lo que los equipos siguen ejecutándose flutter gen-l10n localmente para regenerar las clases de localización de Dart a partir de los archivos ARB traducidos que devuelve Smartling.
¿Listo para ver a Smartling en acción?
Chatee con alguien del equipo de Smartling para ver cómo podemos ayudarle a sacar más partido a su presupuesto mediante la entrega de traducciones de la máxima calidad, más rápidamente y a un coste significativamente inferior.