Contents
-
Traduction de modules contrib de Drupal
- Présentation sommaire de gettext
-
Gestion des fichiers .po et .pot
- Création des fichier de template (.pot)
- Importation au SVN de Koumbit
- Normalisation: fusion en un fichier
- Élimination des chaînes déjà traduites dans le noyau et autres doublons
- Création des fichiers à traduire (fr.po/es.po/etc) et traduction
- Mise à jour du template (.pot) et des fichiers traduits (.po) après le changement des chaînes originales
- Traduire les fichiers .po
- Nouveautés 2008
- Références
Traduction de modules contrib de Drupal
Voici des instructions pas-à-pas pour la traduction de modules contrib de Drupal.
Depuis la sortie de http://localize.drupal.org/, voir aussi cette documentation: DrupalL10n -- JonathanLessard 2010-07-16 11:30:29
Présentation sommaire de gettext
Le manuel de gettext est long mais très instructif. Le lire au complet n'est peut-être pas nécessaire et ce guide devrait vous suffire pour les spécificités de Drupal. Quelques petites choses à savoir sur gettext:
- gettext, en fait, dans Drupal, n'est pas directement utilisé, car Drupal a son propre système de traduction. Mais il peut importer les .po et donc, pour les traducteurs et les outils, ça fait très peu de différence.
le système de traduction est appelé lorsqu'une chaîne de caractères est entourée d'un appel à la fonction t, comme dans:
echo t('Hello world');
un script PHP de Drupal.org passe au travers des fichiers .php de Drupal pour extraire les chaînes (telles 'Hello world') et les mettre dans un fichier .pot, un raccourci pour PO Template, les fichiers .po étant des Portable Objects, par opposition aux .mo binaires, plus rapides à charger, mais pas utilisés dans notre cas. Un .pot pourrait ressembler à ça, sans commentaires:
#: hello.module:1 msgid "Hello world" msgstr ""
plusieurs de ces blocs vont être listé dans le fichier .pot, un pour chaque chaîne à traduire. Le commentaire (la première ligne) désigne où dans le fichier source original on peut trouver l'occurence de cette chaîne, pour par exemple obtenir le contexte si on ne comprend pas la chaîne. La seconde ligne est la chaîne originale à traduire. La troisième ligne va contenir la traduction, dans les fichiers traduits.- le .pot n'est pas le fichier à traduire. C'est le template. les msgstr doivent donc rester vide. C'est en créant un lang.po (par exemple, fr.po ou es.po) qu'on traduit le template.
plusieurs outils en mode graphique peuvent être utilisés pour traduire les lang.po, voir le manuel de Drupal pour de plus amples informations.
Gestion des fichiers .po et .pot
Création des fichier de template (.pot)
Module Translation template extractor (Potx)
Il suffit d'installer le module sur votre site Drupal, choisir le ou les modules pour lesquels générer le template, et le module se chargera de l'exporter dans le bon format. PotX
Download and enable the potx drupal module:
drush dl potx && drush en -y potx && drush cc drush
Par ligne de commande:
Run potx to generate the base pot file for your specific module:
drush potx single --modules=example
* N.B.: la commande génère un fichier "general.pot" dans la racine de l'installation drupal
Par interface:
- Se pointer sur admin/configuration
- Cliquer sur "translate interface"
- Cliquer sur l'onglet "Extract"
- Choisir la module, puis en bas de page dans language de destination
- * Pour le fichier "pot", choisir le template language indépendant
- * Pour un fichier "po" de langauge spécifique, choisir la language et facultative d'inclure les traductions existantes
- Cliquer "Télécharger"
Extractor.php
Pour extraire les chaînes déjà taggées avec des t(), utiliser l'extractor installé dans apc/drupal-pot/extractor, comme suit:
anarcat@homere:/var/alternc/html/d/dev01/apc/drupal-4.7.2/modules/administration$ php ../../../drupal-pot/extractor.php Invalid marker content in merged.inc:745 * t($type) Invalid marker content in merged.inc:787 * t($watchdog->type)
Ceci génère des fichiers .pot dans le répertoire courant, selon le nombre de fichiers avec des t() détectés par le site.
Pour extraire les .pot du core ainsi que le script extractor.php, utilisez la commande CVS:
cvs -z6 -d:pserver:anonymous:anonymous@cvs.drupal.org:/cvs/drupal-contrib co contributions/translations/drupal-pot
La dernière version de extractor.php peut être placée dans un répertoire et lancée à partir d'un browser. Ceci génèrera des .pot pour tous les fichiers trouvés dans ce répertoire et ses sous-répertoires -- DavidLesieur 2006-07-19 15:35:45
Importation au SVN de Koumbit
Pour importer un module donné dans notre SVN pour pouvoir y collaborer, on utilise la séquence de commandes suivantes:
svn mkdir https://svn.koumbit.net/svn/koumbit/trunk/drupal/contrib/modules/administration/ svn co https://svn.koumbit.net/svn/koumbit/trunk/drupal/contrib/modules/administration/ cd administration/ svn add * svn commit -m"import 4.7 module" [... the extractor step above ...] svn add *.pot svn commit -m"add .pot files"
À partir de là, on peut travailler "offline" sur les .pot et faire un svn update sur le serveur de prod au besoin.
Normalisation: fusion en un fichier
De là, il est préférable de travailler sur un seul fichier par module. On fait donc un merge. Il faut aussi placer le fichier .pot dans un répertoire po/. Donc:
svn mkdir for f in *.pot svn mv $f po svn commit -m"move to subdir" cd po msgcat --use-first general.pot [^g]*.pot | msgattrib --no-fuzzy -o tmp svn delete *.pot mv tmp administration.pot svn add administration.pot svn commit -m"merge in one file"
Élimination des chaînes déjà traduites dans le noyau et autres doublons
Plusieurs modules réutilisent des chaînes déjà présentes dans le core de Drupal. Il est alors préférable de réduire la tâche en éliminant ces chaînes en double. Vu qu'il n'y a pas de commande gettext qui fait le travail, on fait appel à une combinaison de commandes:
msgcomm cck.pot ../../../../drupal-pot/*.pot > common.pot msgcomm -u cck.pot common.pot > new mv new cck.pot rm common.pot
La première commande isole les chaînes communes au core et au .pot du module à traduire. Le common.pot contient donc ces chaînes que nous voulons retirer de cck.pot. Pour retirer ces chaînes du cck.pot, il ne reste qu'à aller chercher les chaînes "uniques" aux deux fichiers, qui sont en fait uniques seulement à cck.pot, et donc pas dans le core. Les deux dernières commandes ne sont qu'un trivial ménage.
Création des fichiers à traduire (fr.po/es.po/etc) et traduction
Pour créer une nouvelle traduction, on utilise généralement msginit:
msginit -l fr
ceci va créer un fichier fr.po dans le répertoire courant, prêt à traduire.
Le manuel de drupal a des bonne suggestions de logiciels à utiliser pour la traduction des fichiers .po.
Mise à jour du template (.pot) et des fichiers traduits (.po) après le changement des chaînes originales
Une fois qu'on a ajouté ou modifié des t() dans les fichiers sources, il faut mettre à jour les traductions. Pour ce faire, on ré-créé un fichier .pot et on propage les changements aux traductions. Cette tache requiert les scripts "drupal-pot", disponibles dans le cvs de drupal ainsi que php installé localement.
$ php ../../../drupal-pot/extractor.php $ msgcat -F --use-first general.pot <other .pot files> -o po/<module>.pot $ cd po $ msgmerge -U -F fr.po <module>.pot #backup in ~<module>
Si la source d'une chaîne déjà traduite dans le .po a été modifiée, cette chaîne sera marquée comme fuzzy dans le .po mis à jour par msgmerge. Toute chaîne marquée fuzzy devra être révisée par les traducteurs.
Traduire les fichiers .po
Une fois que les fichiers .po ont été générés et présent dans svn, vous devez les télécharger avec un client svn pour ensuite les éditer avec un éditeur de ficher .po.
Clients subversion
- Sous debian, aptitude install subversion
Windows, télécharger TortoiseSVN
télécharger les fichiers de svn
Une fois votre client svn installé, il suffit de faire un "check-out" du repository des modules à traduire. https://svn.koumbit.net/svn/koumbit/trunk/drupal/contrib/modules/
Sous Debian:
svn co https://svn.koumbit.net/svn/koumbit/trunk/drupal/contrib/modules/
Éditeurs de fichier .po
Choisiez un éditeur dans la liste suivante:
XEmacs (avecc le mode po-mode): runs on Unices with X
GNU Emacs (with po-mode): runs on Unices
KBabel: runs on KDE
poEdit: linux and windows poEdit does support multiple plural forms since version 1.3.
À surveiller lors de la traduction
Les conseils suivants sont basés sur des erreurs fréquentes rencontrées dans des traductions.
Être cohérent avec les traductions existantes du noyau Drupal. Télécharger fr.po et s'en servir comme référence! On y trouvera souvent des réponses concernant des termes difficiles à traduire.
- Quand la phrase originale anglaise se termine par un point, faire pareil dans la phrase traduite.
- Quand la phrase originale anglaise commence par une majuscule (ou minuscule), faire pareil dans la phrase traduite.
Les paramètres dans les chaînes, de la forme %identificateur, ne doivent pas être traduits. Exemple: Click %here to enable this block. se traduit par Cliquez %here pour activer ce bloc.
Un nom de module est un nom propre. Views reste Views et, en français, n'est pas traduit par Vues.
- Toujours tester les traductions sur une installation Drupal. Le contexte permet de vérifier si les traductions font vraiment du sens.
Nouveautés 2008
Voici quelques nouveautés sur le plan de la localisation, communiquées lors de DrupalCon2008.
Module Localization Client
Il y a un cool petit module qui s'appelle Localization client pour D5-D6, qui permettra d'effectuer beaucoup plus rapidement la traduction « à la mitaine » directement dans la base de données... Un genre de croisement entre Firebug et PoEdit mais pour Drupal !!!
http://drupal.org/project/l10n_client
Pour l'instant, Localization Client requiert que le module locale soit patché. Télécharger le ici
Projet de serveur de traduction central
Gábor Hojtsy est aussi en train de lancer un projet de serveur central pour les traductions, qui pourrait (dans un an ou plus selon moi) remplacer le CVS.
http://drupal.org/project/l10n_server
Pour l'instant, il faut continer à soumettre sur le CVS les fichiers traduits à l'aide de PoEdit (ou Localization client puis extraits avec Potx). Cependant, les soumettre aussi sur le serveur central en développement permettrait de tester le système de serveur. Les traductions (ou fichiers .po) entrés sur le serveur peuvent être soumis en tant que « suggestions » pour être validées par la communauté.
Références
- Other tools: