Outils pour utilisateurs

Outils du site


po2phparray

po2phparray.py

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é.

Téléchargement ?

Comment faire ?

Adaptation du code

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.

Utilisation des outils gettext

Création des fichiers pot :

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 !

Création/mise à jours des fichiers po

msginit -i <file>.pot -o <lang>/<file>.po       #Création
msgmerge -U <lang><file>.po potfile/<file>.pot  #Mise à jour

Utilisation de po2phparray.py

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'
))
?>

Exemple de code

<?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') ***/
?>
po2phparray.txt · Dernière modification: 09/09/2014 16:48 par jonas