35 votes

Les fichiers Gettext .po sous contrôle de version

J'utilise actuellement Gettext sur un projet et les fichiers .po sont joliment conservés. sous contrôle de version.

Les fichiers PO contiennent bien sûr des traductions, mais en plus de cela ils contiennent également des métadonnées - des informations sur les fichiers et les numéros de ligne numéros de ligne où se trouvent les chaînes de caractères traduisibles.

Le problème est qu'à chaque fois que vous mettez à jour les fichiers PO, les métadonnées changent beaucoup plus que les traductions réelles. Cela rend difficile de voir plus tard, à partir du contrôle de version, ce qui a été réellement ce qui a été modifié - on voit juste une myriade de changements de noms de fichiers et de de lignes. Comme cela :

- #: 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"

Bien sûr, une solution simple consisterait à désactiver la génération du fichier commentaires de nom de fichier/numéro de ligne dans la sortie xgettext. Mais je trouve en fait ces noms de fichiers comme des indices très utiles lors de la traduction.

Je ne peux sûrement pas être le seul à ne pas aimer les diffs de ses fichiers PO. Des suggestions ?

25voto

Alex Brown Points 15776

Une solution simple consisterait à appliquer un filtre grep pour supprimer les métadonnées des commentaires du diff affiché. Vous pouvez soit faire cela dans le fichier sortie de l'utilitaire diff du contrôle de version :

myVersionControl diff REV1 REV2 filea | grep -v '^..#'

ou vous pouvez demander à l'utilitaire de comparaison de contrôle de version de les ignorer avant de faire la comparaison, ce qui donnera probablement un résultat plus fiable et plus joli :

Je ne sais pas quel système de contrôle de version vous utilisez, mais git (par exemple) vous permet de prétraiter l'entrée de diff. et supprimer les lignes de commentaires pour certains types de fichiers (merci VonC), voir man gitattributes et chercher Exécution de comparaisons textuelles de fichiers binaires . Voici le corps d'un exemple de script à enregistrer comme /usr/local/bin/strippocomments qui le fera :

grep -v '^#:' $1

Vous pouvez ensuite dire à git d'utiliser ce script pour prétraiter les fichiers po, en ajoutant ce qui suit au fichier .git/info/attributes dans votre dépôt :

*.po diff=podiff

et au fichier .git/config dans votre dépôt :

[diff "podiff"]
    textconv = /usr/local/bin/strippocomments

L'utilisation de git diff ne devrait donc pas inclure les lignes commençant par #: .

Notez que les diffs générés par git diff cette approche ne devrait pas être utilisée pour Parcheando - mais git format-patch utilisera toujours le diff par défaut, donc les patches générés pour l'envoi par email seront toujours ok.

20voto

Peter Eisentraut Points 12513

El gitattributes / textconv est la bonne façon de procéder. J'aimerais proposer une meilleure solution en ce qui concerne les outils pour effectuer le prétraitement.

Sur .gitattributes :

*.po    diff=po

Sur .gitconfig :

[diff "po"]
    textconv=msgcat --no-location --no-wrap --sort-output

msgcat du paquet gettext y est un outil utile. Il possède un certain nombre d'options avec lesquelles vous pouvez jouer. L'option --no-location est surtout ce que vous voulez pour filtrer les différences de numéros de lignes. Les autres options peuvent être utiles si xgettext et/ou msgmerge et/ou votre éditeur n'arrête pas de reformater les chaînes de caractères de manière ennuyeuse. (Dans ce cas, il serait également bon de passer ces mêmes options à ces outils, et de reconfigurer votre éditeur).

7voto

VonC Points 414372

Vous pouvez examiner les différentes options offertes par une société de conseil. Différence personnalisée d'un fichier .gitattribute comme spécifier un diff spécial pour les fichiers po.

[diff "mypodiff"]
    command = mypodiff
*.po   diff=mypodiff

avec mypodiff un script appelant n'importe quel diff outil capable de filtrer la ligne que vous ne voulez pas.

7voto

bialix Points 6270

Le paquetage GNU gettext comporte de nombreux utilitaires utiles pour effectuer diverses tâches avec les fichiers PO. Il y a msgcmp pour comparer deux fichiers PO, msgcomm pour sélectionner des messages communs/uniques, msgattrib pour sélectionner/filtrer/transformer des fichiers PO existants. En fonction de ce dont vous avez réellement besoin pour la comparaison de fichiers PO, je pense que vous devez utiliser soit msgattrib soit msgcomm.

Si vous avez juste besoin de comparer deux fichiers PO sans commentaires sur les fichiers/lignes, alors un simple script pour grep et enregistrer dans un répertoire temporaire vos anciens et nouveaux fichiers PO serait suffisant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X