es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo hacer cumplir que una nueva propiedad tenga un valor establecido en tiempo de compilación en Dart?

Soy nuevo en dart/flutter y estoy agregando internacionalización en mi aplicación.

Como flutter no define una forma adecuada de implementar internacionalización (según el video que vi), los desarrolladores son libres de hacerlo de la manera que consideren mejor.

El video mostró una implementación utilizando archivos json. Por lo tanto, en la carpeta “lang” tengo mis archivos json con todas las cadenas y sus respectivas traducciones.

Aquí está la imagen de la carpeta “lang”, aquí está el archivo en.json y aquí está el archivo pt.json.

Ahora imagina que este es un archivo grande con muchas entradas. Y tengo que hacer un cambio importante en mi aplicación, eliminando algunas cadenas, agregando otras y agregando un nuevo idioma. Esto es propenso a errores, ya que podría olvidar agregar alguna entrada clave-valor en alguno de los archivos json. A veces ha ocurrido y el error se produce en tiempo de ejecución.

En Java hay una forma de asegurarse de que el desarrollador no olvide agregar los mismos valores en todas las variaciones de la misma propiedad en tiempo de compilación. Tal vez no sea la mejor forma de lograrlo, pero una forma es usando un enum como se muestra en la imagen a continuación.

Aquí está la imagen con el enum y sus valores en Java.

Ahora, si quiero agregar un nuevo idioma, solo agrego un nuevo parámetro en el constructor del enum y no hay forma de olvidar agregar una traducción porque el código ni siquiera se compilaría.

Aquí está la imagen del nuevo idioma en el enum.

Para solucionar el error, solo tengo que agregar el valor en los Strings (aquí olvidé el caso “es”):

Aquí está la imagen de cómo se arregla el error en el enum.

Y luego puedo usar los valores haciendo algo como esto (incluso el código para encontrar la configuración regional utilizando el contexto podría moverse dentro del método .value()):

Aquí está la imagen de cómo se usan los valores del enum.

Entonces, ¿hay una buena forma de lograr esto en dart/flutter? ¿Para asegurarse de que todos los idiomas tengan todos los textos traducidos en tiempo de compilación?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Lamentablemente, Dart/Flutter no tiene una forma incorporada de garantizar que todos los idiomas tengan todos los textos traducidos en tiempo de compilación. Sin embargo, existen algunos paquetes disponibles que intentan abordar este problema, como “arbify” y “easy_localization”. Estos paquetes utilizan archivos ARB (Aplicación de Conjunto de Recursos) en lugar de archivos JSON, lo cual proporciona una forma más estructurada de manejar las traducciones.

    En “arbify”, se definen las traducciones en un archivo ARB y se genera un archivo de código Dart utilizando una herramienta de línea de comandos. Este archivo generado contiene un enum para cada traducción que se puede utilizar en el código, similar al enfoque que describiste en Java.

    “easy_localization” también utiliza archivos ARB y proporciona una forma de utilizar claves de cadena en lugar de enums. Permite acceder a las traducciones de una manera más concisa y legible utilizando el método “tr”.

    En resumen, aunque no hay una solución incorporada para garantizar las traducciones en tiempo de compilación en Dart/Flutter, el uso de uno de estos paquetes disponibles puede proporcionar un enfoque más estructurado y confiable para manejar las traducciones en tu aplicación.

Comments are closed.