tutorial i18n example internationalization translation

internationalization - example - i18n angular 6



i18n-mejores prácticas para la internacionalización-XLIFF, gettext, INI,...? (10)

puede usar INI si lo desea, es solo que INI no tiene forma de decirle a nadie que está en UTF8, por lo que si alguien abre su INI con un editor, podría dañar su archivo.

Entonces, la idea es que, si puede confiar en que el usuario lo edite con una codificación UTF8.

Puede agregar una lista de materiales al comienzo del archivo, algunos editores lo saben.

¿Qué quieres que almacene? contenido generado por el usuario o los recursos de su aplicación?

EDITAR: ¡Realmente me gustaría ver un debate general sobre los formatos, sus pros y sus contras!

EDIT2: La ''recompensa realmente no ayudó a crear la discusión necesaria, hay algunas respuestas interesantes, pero la cobertura completa del tema aún falta. Seis personas marcaron la pregunta como favoritas, lo que me muestra que hay interés en esta discusión.

Al decidir sobre la internacionalización, la OMI más difícil es la elección del formato de almacenamiento.

Por ejemplo, Zend PHP Framework ofrece los siguientes adaptadores que cubren casi todas mis opciones:

  • Matriz: no, difícil de mantener
  • CSV: no sé, posibles problemas con la codificación
  • Gettext: de uso frecuente, poEdit para todas las plataformas disponibles PERO complicado
  • INI: no sé, posibles problemas con la codificación
  • TBX: no hay pista
  • TMX: ¿demasiado grande? sin editores disponibles gratuitamente.
  • QT: no muy extendido, sin herramientas gratuitas
  • XLIFF: ¿el estándar que viene? PERO no hay herramientas gratuitas disponibles.
  • XMLTM: no, no es lo que necesito

básicamente estoy atascado con las 4 opciones ''audaces''. Me gustaría utilizar archivos INI pero estoy leyendo acerca de los problemas de codificación ... ¿es realmente un problema si utilizo UTF-8 (archivos, conexiones, bases de datos, etc.) estrictos?

Estoy en Windows y traté de averiguar cómo funciona poEdit, pero simplemente no lo logró. Tampoco hay tutoriales en la web, ¿es que gettext todavía es una opción o una especie en peligro de todos modos?

¿Qué hay de XLIFF? ¿Alguien ha trabajado con él? ¿Algún consejo sobre qué herramientas usar?

¿Alguna idea para la integración de Eclipse de cualquiera de estas tecnologías?


POEdit no es realmente difícil de aprender. Simplemente cree un nuevo archivo .po, luego dígale que importe cadenas de archivos fuente. El programa escanea tus archivos PHP para cualquier llamada de función que coincida con _("Text"), gettext("Text") , etc. Incluso puedes especificar tus propias funciones para buscar.

Luego ingresa una traducción en el cuadro correspondiente. Cuando guardas tu archivo .po, se genera automáticamente un archivo .mo. Es solo una versión binaria de las traducciones que gettext puede analizar fácilmente.

En su script PHP haga una llamada a bindtextdomain() indicándole dónde se encuentra su archivo .mo. Ahora todas las cadenas pasadas a gettext (o la función de subrayado) serán traducidas.

Hace que sea realmente fácil mantener sus archivos de traducción actualizados. POEdit también tiene algunas características interesantes como permitir comentarios, mostrar cadenas modificadas y eliminadas y permitir coincidencias difusas, lo que significa que no tiene que volver a traducir cadenas que se han modificado ligeramente.


Trabajé con dos de estos formatos en el lado l18n: TMX y XLIFF. Ellos son bastante similares. TMX es más popular ahora, pero XLIFF está ganando soporte rápidamente. Había al menos un editor XLIFF gratuito la última vez que lo analicé : Transolution pero no se está desarrollando ahora.


Ninguna de esas elecciones me parece muy apetecible.

Si envía archivos para traducir en varios idiomas, puede confiar en que las codificaciones son correctas, especialmente si nadie de su equipo habla esos idiomas. A veces es difícil detectar un problema de codificación en un idioma extranjero, y es demasiado fácil corromper inadvertidamente las codificaciones de archivos si dejas que tu sistema operativo ''adivine''.

Realmente quieres un formato que declare su codificación. De lo contrario, los traductores o sus herramientas de traducción podrían seleccionar algo diferente a UTF-8. Por mi dinero, cualquier tipo de formato XML simple es lo mejor, pero parece que tendrías que hacer tu propio en Zend. XLIFF y TMX son ciertamente excesivos.

Un formato como los recursos XML de Java sería ideal.


Un enfoque bastante simple es simplemente usar un archivo de recursos y un script de recursos. Los programas como MSVC no tienen problemas para editarlos. También son razonablemente amigables con otros sistemas (y también con los editores de textos). Puede crear tablas de cadenas separadas (y tablas de mapas de bits) para cada idioma y marcar cada tabla con el idioma en el que se encuentra.


Yo mismo hago el almacenamiento de datos usando un diseño personalizado: todo el texto que se muestra se almacena en el DB.

Tengo dos mesas. La primera tabla tiene un valor de identidad, un campo varchar de 32 caracteres (indexado en este campo) y una descripción en inglés de 200 caracteres de la frase.

Mi segunda tabla tiene el valor de identidad de la primera tabla, un código de idioma (EN_UK, EN_US, etc.) y una columna NVARCHAR para el texto.

Utilizo un nvarchar para el texto porque admite otros juegos de caracteres que todavía no uso.

El varchar de 32 caracteres en la primera tabla almacena algo así como ''pleaselogin'' mientras que la segunda tabla realmente almacena el completo "Por favor ingrese su nombre de usuario y contraseña a continuación".

Creé una enorme lista de valores dinámicos que reemplazo en tiempo de ejecución. Un ejemplo sería "Tienes {[dynamic: passworddaysremain]} days para cambiar tu contraseña". - Esto me permite trabajar con el orden de palabras en diferentes idiomas.

Hasta ahora solo he tenido que ocuparme de los números arábigos, pero tendré que resolver algo para el primer usuario que requiera números no árabes.

De hecho, extraigo esta información de la base de datos en un intervalo de 2 horas y la guardo en el disco en un archivo para cada idioma en XML. Se usa ampliamente el CDATA.

Hay muchas opciones disponibles, para el rendimiento puede usar plantillas html para cada idioma: mi método funciona bien, pero usa el XML DOM mucho en tiempo de ejecución para crear las páginas.


Esto podría ser un poco diferente de lo que se ha publicado hasta ahora y puede no ser exactamente lo que estás buscando, pero pensé que lo agregaría, si no por otra cosa sino por un enfoque diferente. Fui con un enfoque orientado a objetos. Lo que hice fue crear un sistema que encapsula archivos de idiomas en una clase almacenándolos en una matriz de cadenas => pares de traducción. El acceso a la traducción es a través de un método llamado traducir con la cadena clave como parámetro. Las clases extendidas heredan el conjunto de idiomas del padre y pueden agregarlo o sobrescribirlo. Debido a que las clases son extensibles, puede cambiar una clase base y hacer que los cambios se propaguen a través de los elementos secundarios, haciendo que sea más fácil de mantener que una matriz por sí misma. Además, solo llamas a las clases que necesitas.


Simplemente almacenamos las cadenas en la base de datos y tenemos un modo de traductor integrado en la aplicación para manejar en realidad la adición de cadenas para diferentes idiomas.

En la aplicación usamos varios trucos para crear identificadores de texto, como

£("btn_save") £(Order.class,"amt")

Las traducciones se cargan desde el archivo db cuando se inicia el sistema o cuando se inicia manualmente una recarga. El método £ se encarga de buscar la cadena traducida según el idioma especificado en la sesión del usuario.



Siempre hay Translate Toolkit que permite traducir entre todos los formatos mencionados, y prefiero gettext (po) y XLIFF.