J'ai eu besoin pour GCweb d'un utilitaire permettant de convertir les fichiers .po en dictionnaire compatible fonctionnant sur le même principe.
po2phparray.py à été développé et testé sous GNU/linux et devrait fonctionner sous toute plateforme avec python d'installé.
Les chaines traductrice du script php doit, comme pour gettext, être marquée par une fonction. Par exemple “__
”
__('chaine à traduire'); //chaine à traduire entre apostrophe, le script n'a pas été fait pour fonctionner avec les guillemets
Faites une extraction des chaines avec les outils de gettext.
xgettext -k__ -kN__ --from-code UTF-8 <file>.php -o <file>.pot --no-wrap #création du fichier pot
-k__
”, “-kN__
” spécifie le nom la fonction de marquage (différent que celui par défaut de gettext)–no-wrap
” Est obligatoir, si les fichiers po on des retours à la ligne en plus de ceux du script php ça ne fonctionnera pas !–from-code UTF-8
” si votre code est écrit en UTF8 !msginit -i <file>.pot -o <lang>/<file>.po #Création msgmerge -U <lang><file>.po potfile/<file>.pot #Mise à jour
Une fois que vous avez traduit les fichiers po :
po2phparray.py file.po > file.php
Le fichier contient un code qui complète un dictionnaire php nommé $lang. Ce dictionnaire doit donc être définit en ammont !
<!-- file.php --> <?php $lang = array_merge($lang, array( 'chaine à traduire' => 'chaine traduite', 'autre chaine à traduire' => 'autre chaine traduite' )) ?>
<?php //l10n $lang = array(); //Definition du tableau $lang include dirname(__FILE__).'locales/'.$conf['lang'].'/domaine.php' ; // $conf['lang'] : langue de l'utilsateur // domaine.php : fichier créer par po2phparray.py function __($str,$comment='') { global $lang; if (isset($lang[$str])) return $lang[$str]; else return $str; } /*** votre code avec les chaines traduisible sous la forme __('votre chaine') ***/ ?>