git - usados - Gettext.po archivos bajo control de versión
¿qué es un sistema control de versiones centralizado? (4)
El paquete gettext de GNU tiene numerosas utilidades útiles para realizar varias tareas con archivos PO. Hay msgcmp para comparar dos archivos PO, msgcomm para seleccionar mensajes comunes / únicos, msgattrib para seleccionar / filtrar / transformar archivos PO existentes. Depende de lo que realmente necesite del archivo PO, creo que necesita usar msgattrib o msgcomm.
Si necesita simplemente comparar dos archivos PO sin comentarios sobre el archivo / línea, entonces script simple para grep y guardar en directorio temporal sus archivos PO viejos y nuevos serían suficientes.
Actualmente, el uso de Gettext en un proyecto y los archivos .po están muy bien guardados bajo el control de la versión.
Los archivos PO, por supuesto, contienen traducciones, pero además de eso, también contienen algunos metadatos: información sobre los archivos exactos y los números de línea donde se encuentran las cadenas traducibles.
El problema es que cada vez que actualiza los archivos PO, los metadatos cambian mucho más que las traducciones reales. Esto hace que sea realmente difícil ver más tarde desde el control de versiones el cambio que realmente se modificó: solo se ve una gran cantidad de cambios en los nombres de los archivos y los números de línea. Como eso:
- #: somefile.js:43
- #: somefile.js:45
- #: somefile.js:118
+ #: somefile.js:203
+ #: somefile.js:215
msgid "Translate me please"
msgstr "Tõlgi mind palun"
- #: somefile.js:23
- #: somefile.js:135
+ #: otherfile.js:23
+ #: otherfile.js:135
msgid "Note"
msgstr "Märkus"
- #: andThatFile.js:18
#: orThisFile.js:131
- msgid "Before I was like this"
- msgstr "Selline olin ma enne"
+ msgid "I happen to be changed"
+ msgstr "Paistab, et mind muudeti"
Por supuesto, una solución simple sería desactivar la generación de comentarios de nombre de archivo / número de pila en la salida de xgettext. Pero en realidad encuentro esos nombres de archivo como pistas bastante útiles a la hora de traducir.
Seguramente no puedo ser el único a quien no le gustan los difs de sus archivos PO. Sugerencias?
Puede ver las diferentes opciones que ofrece un archivo diff .gitattribute personalizado , como especificar un archivo diff especial para archivos po
[diff "mypodiff"]
command = mypodiff
*.po diff=mypodiff
con mypodiff
un script que llama a cualquier herramienta de diff
capaz de filtrar la línea que has wa wnt
Una solución simple sería aplicar un filtro grep para eliminar los metadatos de comentario de la diferencia visualizada. Puede hacer esto al resultado de la utilidad diff de control de versión:
myVersionControl diff REV1 REV2 filea | grep -v ''^..#''
o puede indicarle a la utilidad de control de versiones que ignore estos antes de realizar la comparación, lo que probablemente genere un resultado más confiable y más bonito:
No sé qué sistema de control de versiones usa, pero git (por ejemplo) le permite preprocesar la entrada a diff y eliminar las líneas de comentarios para ciertos tipos de archivos (gracias a VonC), ver man gitattributes
y buscar para realizar diffs de texto de archivos binarios Aquí está el cuerpo de un script de muestra para guardar como /usr/local/bin/strippocomments
que hará eso:
grep -v ''^#:'' $1
Luego puede indicarle a git que use este script para preprocesar archivos po, agregando lo siguiente al archivo .git/info/attributes
en su repositorio:
*.po diff=podiff
y al archivo .git/config
en su repositorio:
[diff "podiff"]
textconv = /usr/local/bin/strippocomments
El uso de git diff no debería incluir ninguna línea que comience con #:
Tenga en cuenta que los diffs generados a partir de git diff
con este enfoque no deberían utilizarse para aplicar parches, pero git format-patch
seguirá utilizando el valor por defecto, por lo que los parches generados para el envío de correos electrónicos seguirán siendo correctos.
El enfoque gitattributes
/ textconv
es el camino correcto a seguir. Me gustaría ofrecer una mejor solución con respecto a las herramientas para hacer el preprocesamiento.
En .gitattributes
:
*.po diff=po
En .gitconfig
:
[diff "po"]
textconv=msgcat --no-location --no-wrap --sort-output
msgcat
del paquete gettext es una herramienta útil allí. Tiene una cantidad de opciones con las que puedes jugar. La opción --no-location
es especialmente lo que desea filtrar las diferencias de número de línea. Las otras opciones podrían ser útiles si xgettext
y / o msgmerge
y / o su editor siguen formateando las cadenas de formas molestas. (En ese caso, también sería bueno pasar esas mismas opciones a esas herramientas, y reconfigurar su editor).