localization - Combinación de teclas y texto completo al trabajar con archivos gettext y.po
poedit (2)
Estoy buscando archivos gettext
y .po
para crear una aplicación multilingüe. Mi entendimiento es que en el archivo .po
, msgid
es la fuente y msgstr
es la traducción. En consecuencia, veo 2 formas de definir msgid
:
Usar texto completo (por ejemplo, "My name is %s./n"
) con las siguientes ventajas:
- al llamar a
gettext
puedes ver claramente lo que está a punto de traducirse - es más fácil traducir archivos
.po
porque contienen el contenido real que se traducirá
Usar una clave (p. Ej. my-name %s
) con las siguientes ventajas:
- cuando el texto fuente es largo (p. ej., párrafo sobre empresa), las llamadas
gettext
son más concisas, lo que hace que sus opiniones sean más limpias - es más fácil mantener varios archivos
.po
y vistas, porque es menos probable que la clave cambie (por ejemplo, la clave decompany-description
de lacompany-description
mucho menos probable que la descripción real de la empresa)
De ahí mi pregunta:
¿Hay alguna manera de trabajar con los archivos gettext
y .po
que permite combinar las ventajas de ambos métodos, es decir:
-usage de teclas para llamadas gettext
¿posibilidad de que el traductor vea el texto completo que necesita ser traducido?
gettext fue diseñado para traducir el texto en inglés a otros idiomas, y esta es la forma en que debes usarlo. No lo use con llaves. Si desea claves, use alguna otra técnica, como una matriz asociativa.
He manejado dos grandes proyectos de código abierto (50 idiomas, 5000 traducciones), uno usando el enfoque clave y otro usando el enfoque gettext, y nunca volvería a utilizar el enfoque clave.
Las desventajas incluyen la propagación de cambios en el texto en inglés a los otros lenguajes. Si cambias
msg_no_food = "We had no food left, so we had to eat the cats"
a
msg_no_food = "We had no food left, so we had to eat the cat''s"
El nuevo texto tiene un significado completamente diferente, entonces, ¿cómo se asegura de que otras traducciones sean invalidadas y actualizadas?
Mencionaste tener texto largo que hace que tus guiones sean difíciles de leer. La solución a esto podría ser ponerlos en un script separado. Por ejemplo, pon esto en el código principal
print help_message(''help_no_food'')
y tiene un script que solo proporciona mensajes de ayuda:
switch ($help_msg) {
...
case ''help_no_food'': return gettext("We had no food left, so we had to eat the cat''s");
...
}
Otro problema para gettext es cuando tienes una página completa para traducir. Tal vez una página de folleto en un sitio web que contiene muchas imágenes incrustadas. Si permite mucho espacio para idiomas con texto largo (por ejemplo, alemán), tendrá muchos espacios en blanco en idiomas con texto corto (por ejemplo, chino). Como resultado, puede tener diferentes imágenes / diseño para cada idioma.
Como estos tienden a ser pocos, a menudo es más fácil implementar estos gettext externos por completo. p.ej
brochure-view.en.php
brochure-view.de.php
brochure-view.zh.php
Acabo de responder una pregunta similar (mucho más antigua) aquí .
Version corta:
El formato de archivo PO es muy simple, por lo que es posible generar archivos PO / MO a partir de otro flujo de trabajo que permita la flexibilidad que está solicitando. (tus desarrolladores quieren identificadores, tus traductores quieren palabras)
Puede rodar esta solución usted mismo, o utilizar una aplicación basada en la nube como Loco para administrar sus traducciones y exportar un archivo Gettext con identificadores cuando sus desarrolladores lo necesiten.