proyectos ejemplos php localization internationalization gettext

php - ejemplos - django



¿Mejores prácticas de localización de PHP? gettext? (3)

Estamos en el proceso de hacer que nuestro sitio web sea internacional, permitiendo múltiples idiomas.

He investigado el "gettext" de php, sin embargo, si lo entiendo bien, veo un gran defecto:

Si mi página web tiene, digamos "Hello World" como texto estático. Puedo poner la cadena como <?php echo gettext("Hello World"); ?> <?php echo gettext("Hello World"); ?> , genere los archivos po / mo usando una herramienta. Luego, le daría el archivo a un traductor para que trabaje.

Unos días después, queremos cambiar el texto en inglés para decir "Hola, pequeño mundo". ¿Cambio el valor en gettext? ¿Creo un archivo PO inglés y lo cambio allí? Si cambia el gettext lo considerará como una nueva cadena y perderá instantáneamente la traducción actual ...

Me parece que, gradualmente, el contenido del archivo php tendrá texto antiguo en todas partes. O bien, las personas que traducen pueden tener que decir "cuando veas Hello World, en su lugar, traduce Hello Small World".

No sé, me estoy confundiendo.

En otros lenguajes de programación, he visto que usan palabras clave como web.home.featured.HelloWorld .

¿Cuál es la mejor manera de manejar las traducciones en PHP?

Gracias


Actualmente, estoy lidiando con el mismo problema. La práctica común con gettext es usar el texto en inglés como la clave. Recientemente, nuestro editor de copias cambió todo el texto en inglés (otros idiomas apenas se tocan), así que tenemos que cambiar todo el código fuente de todos los archivos PO.

Estamos cambiando a una clave neutral. Como ya tenemos algunos sitios en Java. Utilizaremos el mismo formato de nombre de propiedad.


Básicamente, preguntaste y respondiste a tu propia pregunta, la respuesta podría ser tener una mejor comprensión de cómo funcionan los archivos PO.

Dentro del archivo PO tienes un msgid y un msgstr. El msgid es el valor que se reemplaza con el msgstr dentro del archivo PHP dependiendo de la localización.

Ahora puedes hacer que los msgid sean lo que quieras, podrías hacerlo bien:

<?php echo _("web.home.featured.HelloWorld"); ?>

Y entonces nunca volvería a tocar esta cadena dentro de la fuente, solo edita la cadena a través de los archivos PO.

Así que, básicamente, la respuesta a su pregunta es hacer que los valores de gettext identifiquen lo que debe decir la cadena, sin embargo, los traductores suelen usar el texto predeterminado de los archivos de idioma como base para la conversión, no el identificador en sí.

Espero que esto esté claro.


Sé que se ha aceptado una respuesta, y la respuesta anterior es buena. Pero hay otro problema con el uso de teclas de estilo de máquina permanentes como thing.stuff.widget cuando se trabaja con Gettext.

Si bien utilizar claves permanentes es un mejor enfoque para el desarrollo, Gettext no está configurado para ese estilo de trabajo y esto puede complicar su flujo de trabajo .

Si presenta un traductor con un archivo PO rellenado con claves en lugar del texto fuente, es posible que no sepa qué inglés debería ser. Por lo tanto, debe proporcionarles un segundo archivo que contenga traducciones del idioma de origen para que puedan compararlas. No es el fin del mundo, sino más complicado para ellos y no cómo se diseñó Gettext. (clavija cuadrada, agujero redondo, etc.)

Creo que PO está perfectamente bien como formato de archivo para traducciones en PHP, y especialmente recomendado si no estás trabajando con un framework que tenga un buen módulo l10n, pero eso no significa que sea bueno para el flujo de trabajo y tu proceso de traducción.

Sugiero que llegue a un flujo de trabajo que les permita a sus programadores trabajar con claves permanentes, sus traductores trabajen con palabras y le proporcionen un archivo MO al otro lado. Echa un vistazo a Loco para encontrar una solución a esto.

Alternativamente, utilice un formato de archivo provisional diferente que permita el uso de claves y palabras. TMX es un ejemplo. Si aún desea usar Gettext en tiempo de ejecución, puede convertir los archivos .