Autant le système de traduction de Drupal est efficace, autant cela peut vite devenir l'enfer lorsqu'il s'agit de créer et de maintenir un fichier de traduction spécifique à son module. Utiliser pour cet tache l'export de Drupal est déjà casse-binette (car on va y trouver toutes les traductions, celles de vos modules et le reste...) mais surtout pas exhaustif car les textes sont découverts par Drupal "à la volée", au moment de leur affichage.
La solution passe donc par un outil d'extraction prévu pour cet usage mais malheureusement pas pas assez connu et documenté.
Comme chacun sait (évidement
), lorsque l'on construit un module Drupal, il est de bonne pratique d'utiliser la fonction t("...") qui opérer la traduction, si disponible, de la chaîne passée en paramètre. Lors de l'affichage, la chaîne va ainsi passer dans moulinette à Drupal qui, en fonction de la langue courante (ex.français), de la disponibilité d'un dictionnaire pour cette langue, et de la présence d'une traduction dans ce dictionnaire, va retourner par retourner un t("This is a test"), la valeur Ceci est un test
.
Tout le problème va donc maintenant résider en le fait de pouvoir fabriquer un tel dictionnaire contenant la liste exhaustive des textes de notre module et de celui-ci seulement. Ce travail est réalisé par POT eXtractor.
POTX est un outil qui peut fonctionner en mode WEB (peut conseillé pour l'instant, pas encore sec), ou plus simplement en ligne de commande. Il va scanner tous les fichiers contenant du texte dans un dossier module et fabriquer un fichier .POT.
Rapidement, les fichier PO et POT sont un standard de traduction d'application du monde Unix (ou plus particulièrement GNU). Un Portable Objects (PO) est un simples fichier texte qui contient une liste de traductions littérales de phrases complètes, d'une langue vers une autre langue, généralement de l'anglais vers une langue cible.
Le Portable Objects Template (POT), quant à lui, est un fichier PO qui dont les données de la langue cible ne sont pas traduit. Une sorte de fichier vierge.
La syntaxe d'un fichier .po (ou pot) donne ceci :
L'outil POTX, ne générant que des fichier .pot, va donc nous donner un fichier texte contenant une série de choses du genre :
Là il ne reste plus alors au traducteur qu'à copier ce fichier en un fr.po et de remplir les trous.
POTX est téléchargeable ici POTX. Il se décompresse où vous voulez (soit dans ~/mes_outils/potx, soit dans votre dossier modules si vous voulez tester le mode WEB).
Une fois décompressé, vous y trouverez un script potx-cli. Ce dernier a besoin de PHP en mode ligne de commande pour fonctionner (urpmi php-cli).
Ensuite, pour plus de simplicité vous pouvez le modifier et ajouter en première ligne un #! /usr/bin/php et lui appliquer un chmod +x potx-cli.php.
Ceci fait, il suffit d'aller dans le dossier de votre module à traduire et de lancer la commande ~/mes_outils/potx/potx-cli.php pour que l'outil vous génère un fichier general.pot... Et c'est fini.
POTX va extraire de votre code, tous les textes contenus dans des t(...), mais aussi ceux contenus dans les fonctions comme format_plural(...). En revanche il ne prendra pas les chaînes non encadréers par t(), ni celle contenant de variables (pratique déconseillée). Par exemple pour le fragment php suivant :
Le fichier general.pot contiendra donc :
Voilà donc un outil simple et efficace qui vous ferra j'espère gagner pas mal de temps. La seule chose qui lui manque est la fabrication de fichier .po pour une langue donnée. En effet, lorsque certaines traductions sont déjà connues de Drupal, il serait agréable que l'outil fabrique un fichier .po contenant les traductions déjà réalisées... Pour une prochaine version ou a faire à la mimine...
- répondre
alex , le 16 November, 2007 - 13:30Je me posais justement la question du comment du pourquoi..
Merci.
- répondre
Ulhume, le 17 November, 2007 - 13:23de rien
- répondre
tenshu , le 17 November, 2007 - 19:48super
Poster un nouveau commentaire