Mot-clé - gettext

Fil des billets - Fil des commentaires

lundi, avril 28 2008

Traduction gettext et mémoire

Ça fait un petit moment que je cherche à terminer ma relecture complète des fichiers .po français du projet PostgreSQL. C'est tellement long que la démotivation régnait sur ce projet. Le problème est de relire des milliers de lignes (2847 rien que pour le plus gros, à savoir postgres.po), de modifier de mémoire pour obtenir les mêmes traductions sur les différentes versions. La mémoire pose problème dans ce cas car il est difficile de se rappeler la traduction d'une certaine phrase... manuellement, c'est mission impossible. Aligner les sorties des options est simple comparé à ce jeu de mémoire.

Dimanche dernier, je me suis rappelé qu'on m'avait parlé d'un système de mémoire gettext. En fait, l'idée est tout bête. Pour éviter de traduire plusieurs fois la même phrase, un outil gettext propose une traduction qu'il récupère d'un mémoire. J'avais auparavant aucune idée sur la façon de créer ce mémoire. Mais dimanche, une idée a subitement germé : la version 8.3 a été entièrement relue, ce fut long et fastidieux mais c'est fait. On peut donc se servir de ces traductions déjà vérifiées comme mémoire pour les autres versions.

J'ai donc commencé à chercher des outils pour m'aider en me disant que, dans le pire des cas, j'écrirais ces outils. Comme d'habitude, pas besoin, les outils existent déjà. Donc voici un petit résumé...

msgen permet la création d'une mémoire gettext. Avec ces commandes, j'ai créé un sous répertoire contenant le mémoire pour chaque .po particulier de PostgreSQL:

cd head
mkdir ../memoire
for fichier in *.po
do
  LANG=C msgen -o ../memoire/${fichier}t $fichier
done

Ensuite, il a fallu combiner la mémoire des traductions de la dernière version (la 8.3) avec les traductions des versions précédentes. Cet assemblage nécessite l'outil msgmerge :

for fichier in *.po
do
 mv $fichier ${fichier}.bak
 echo -n "$fichier "
 LANG=C msgmerge --no-wrap -N -o $fichier ../memoire/${fichier}t ${fichier}.bak
done

L'option --no-wrap empêche msgmerge de redimensionner les lignes, histoire d'avoir un diff le plus petit possible. Quant à l'option -N, elle permet de désactiver les recherches inexactes car je veux absolument que la phrase en anglais en version 8.3 corresponde exactement à la phrase en anglais d'une version antérieure pour qu'un remplacement de la traduction puisse intervenir.

Après quelques vérifications, quelques modifications de dernières minutes sur la version 8.3 (et oui, même après validation, il y a encore des retouches à faire), j'ai enregistré les modifs. Évidemment, il reste encore des soucis. Mais un grand nombre de différences de traduction a été résolu grâce à cela. Je vais utiliser les traductions actuelles... si je tombe sur un problème, il sera rapidement corrigé sur toutes les versions.