Saltar al contenido

Angular 6 – i18n frente a ngx-translate

Solución:

¿Es demasiado nuevo para asumirlo?

Esto se basa en opiniones y, por lo tanto, fuera de tema.

Aparentemente tengo que tener un sitio web separado

Necesita una aplicación separada (es decir, index.html + paquetes). Pero podría servir todas esas aplicaciones desde una única URL, decidiendo cuál servir en el servidor. Eso cambiará (con suerte) con Angular 7, cuando esté disponible el nuevo i18n dinámico, construido sobre Ivy.

¿Es un caso que los archivos de plantilla se insertan dinámicamente cada vez?

No estoy seguro de lo que quieres decir. Las traducciones de la configuración regional para la que construye se almacenan en las clases de plantilla generadas en tiempo de compilación, por el compilador Angular AOT.

¿Hay alguna forma de cambiar de idioma en vivo con angular i18n?

No, y eso tampoco será posible con la próxima versión de i18n. La misma aplicación única podrá ejecutarse en varios idiomas, pero el idioma aún tendrá que elegirse al inicio, y tendrá que reiniciar la aplicación para elegir otro idioma.

¿Hay alguna forma de cambiar de idioma en vivo con angular i18n?

No. No eficientemente al menos.

¿Es eso lo que llaman JIT?

No. El compilador JIT es lo que compila sus plantillas HTML en JavaScript al inicio, en el navegador. En producción, usa el compilador AOT (que también se usa para integrar las traducciones en las clases JS generadas), que realiza una compilación similar de las plantillas, pero en el tiempo de compilación en lugar de en el tiempo de ejecución.

La discusión aún continúa, y aquí puede encontrar algunas respuestas y opiniones, incluso directamente de los desarrolladores de Angular: https://github.com/ngx-translate/core/issues/495

Personalmente, estructuraría la aplicación con el i18n oficial y eventualmente agregaría alguna traducción dedicada en el código con la biblioteca ngx-translate.

¿Hay alguna forma de cambiar de idioma en vivo con angular i18n?

De hecho, lo hay. Necesita crear diferentes dist de su aplicación, pero luego puede cambiar en vivo después de la implementación completa:

Documentos oficiales de Angluar y tutorial sugerido

Es comprensible por qué a los desarrolladores les gusta una biblioteca similar a ngx-translate para encargarse de la internacionalización. Después de todo, nos facilita la vida al hacer que el problema de traducción sea un mapeo 1v1. Desafortunadamente, no es así como funciona con los lenguajes humanos. Uno tiene dos que saben más de un idioma para comprender mejor las deficiencias de este enfoque.

Aquí hay un pequeño ejemplo: supongamos que tiene una aplicación para gastos de viaje, tiene una vista tabular en la que el título de una columna es “tiempos” que indica cuándo se informó el gasto. Luego imagina que en dicha aplicación tienes una mini calculadora para hacer una verificación básica de tus gastos que tiene un botón de multiplicación x con una escala que dice “tiempos”. Cuando haces ngx-translate, los extraes con la misma clave “TIMES”, que a su vez el traductor te devuelve una traducción. Pero la primera aparición de “tiempo” no se traduce necesariamente igual que la segunda en todos los demás idiomas. Tome el español por ejemplo:

  • “dos VECES tres” (como en la calculadora) -> “dos POR tres”
  • “TIEMPOS de gasto” (como en la vista tabular) -> “TIEMPOS de gasto”

En realidad, esta es la razón por la que la internacionalización se está moviendo hacia el uso de un formato más sofisticado como XLF para admitir el significado, la descripción (en el caso de Angular) en lugar del antiguo estilo JSON de 1 profundidad que no puede adaptarse a la traducción con respecto al contexto.

Ahora puede argumentar que esto se puede resolver registrando dos claves diferentes para “tiempos” que en inglés se asignan a la misma cosa, pero eso requiere que usted, como desarrollador, conozca todos los idiomas que admite su aplicación mientras se desarrolla o tendría que hacerlo. pasar por otra iteración (¡el tiempo es dinero!) para obtener los comentarios del cliente y luego agregar una clave separada, mientras que si proporciona una descripción y el significado de su mensaje (texto), el traductor se encarga de ello sin que usted tenga conocimiento del otro. idioma (si sabes español piensa en lo complicado que puede ser esto con las formas del verbo indicativo y subjuntivo que son iguales en inglés pero no en español).

Para responder a su otra pregunta “¿Hay alguna forma de cambiar el idioma en vivo con angular i18n?”: Sí, la hay. Eche un vistazo a este increíble artículo sobre la gestión estatal en aplicaciones. En pocas palabras, necesita que su cliente y los estados persistentes se reflejen en la URL. Luego, todo lo que necesita hacer es agregar un prefijo de configuración regional a su ruta, lo que hace que su servidor web le proporcione la configuración regional correcta. Entonces, sea cual sea el estado de su aplicación antes de cambiar la acción de cambio de configuración regional, se puede recuperar de la URL (ya que “refleja tanto el estado persistente como el del cliente”).

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *