2011-11-27 30 views
6

Con gettext, el texto de mensajes original (generalmente en inglés) sirve como la clave de mensaje ("msgid") para las traducciones. Esto significa que cada vez que el texto original cambia, el msgid debe actualizarse en todos los archivos .po.¿Puedo actualizar automáticamente los archivos msg en los archivos .po de gettext para cambios de texto triviales?

Para cambios reales del texto, esto es obviamente inevitable, ya que el traductor debe actualizar la traducción.

Sin embargo, si el cambio del original no cambia su significado, re-traducción es superfluo (modificar por ejemplo, en el punteado, espacios en blanco cambios, o la corrección de un error de ortografía).

¿Hay alguna manera de actualizar automáticamente los archivos .po en ese caso?

He intentado utilizar xgettext & msgmerge (con coincidencia aproximada encendido), pero coincidencia aproximada a veces falla, además de esto produce una gran cantidad de banderas feas "#, fuzzy".

Nota: Hay una pregunta similar: How to efficiently work with gettext PO files when making small edits to large text values Sin embargo, se trata de grandes cadenas, por lo tanto acerca de un problema más específico.

+0

Gracias por hacer referencia a la pregunta similar; Estoy de acuerdo en que tal vez haya respuestas diferentes y que no se reproduzca en un policía duplicado; sin embargo, diré que http://stackoverflow.com/a/3798064/179583 parece aplicarse también a esto. – natevw

Respuesta

2

Una forma de evitar el problema es dejar los msgids solo, tener un archivo .po para el idioma original y hacer la corrección dentro de eso.

Sin embargo, siempre me parece más una solución que una solución adecuada. Para la próxima iteración (donde definitivamente habrá más cambios de msgid), el msgid se cambia y los traductores lo traducen en su actualización habitual o cada idioma se actualiza a mano cuando se cambia el msgid.

2

He tenido exactamente este problema al hacer cambios menores en un proyecto django. Lo que hago es lo siguiente:

  1. Cambiar el mensaje en el código.
  2. Ejecute Buscar y reemplazar en todos los archivos de traducción ("django.po"), reemplazando el mensaje anterior (msgid) por el nuevo.
  3. Ejecute django-admin makemessages.

Si he hecho las cosas bien, el último paso es superfino (es decir, ha realizado el cambio para gettext). django usa las utilidades de gettext, por lo que no debería importar cómo hagas tus archivos de mensajes.

que buscar y reemplazar así: find . -name "*.po" -print | xargs sed -i 's/oldmessageid/newmessageid/g' Cortesía de http://rushi.vishavadia.com/blog/find-replace-across-multiple-files-in-linux

+1

Sí, usar buscar y reemplazar es la otra solución obvia (junto con la solución de dsas de usar los msgids fijos). Sin embargo, buscar y reemplazar puede ser muy complejo, si algunos msgids son subcadenas de otros, o también ocurren como parte de traducciones, o si necesita duplicar msgids (cadena original utilizada en varios lugares, y solo algunos cambios). Entonces no es una solución general. – sleske

Cuestiones relacionadas