Étude de la possibilité d'utiliser gettext pour internationaliser WiKiss (FS#37).
- système éprouvé et efficace
- répandu chez les hébergeurs ?
- facilité pour les traducteurs (de nombreux outils existent)
- gestion automatique de l'absence d'un message
- des heures pour comprendre comment ça fonctionne :)
- l'extension gettext doit être activée pour php
- la locale concernée doit être installée sur le système
- les fichiers .mo sont dépendants du système du serveur (linux/windows)
- le nom de la locale est différente du code langue (en, en_US) et pour chaque système
→ tester quelles sont les locales chez les différents hébergeurs
Voici une liste de plateformes d'hébergements (ou distribution linux) et les locales qui y sont installées. Pour les distributions linux, je me base sur l'install standard, sans chercher à reconfigurer quoi que ce soit.
locale | hébergeur | distribution linux | free.fr | tuxfamily | kelio.org | Ubuntu (fr) | debian (ovh) | mandriva 2007 | fr | | | | | | | fr_FR | | | | | | | fr_FR.utf8 | | | | | | | fr_FR.iso885915 | | | | | | | fr_FR.iso88591 | | | | | | | fr_BE | | | | | | | fr_BE.utf8 | | | | | | | fr_BE.iso885915 | | | | | | | fr_BE.iso88591 | | | | | | | fr_CA | | | | | | | fr_CA.utf8 | | | | | | | fr_CA.iso885915 | | | | | | | fr_CA.iso88591 | | | | | | | en | | | | | | | en.iso88591 | | | | | | | en_US | | | | | | | en_US.utf8 | | | | | | | en_US.iso885915 | ![img/i.png](img/i.png) | | | | | | en_US.iso88591 | | | | | | | en_GB | | | | | | | en_GB.utf8 | | | | | | | en_GB.iso885915 | ![img/i.png](img/i.png) | | | | | | en_GB.iso88591 | | | | | | | es_ES | | | | | | | es_ES.utf8 | | | | | | | es_ES.iso88591 | | | | | | | de_DE | | | | | | | de_DE.utf8 | | | | | | | de_DE.iso88591 | | | | | | | nl_NL | | | | | | | nl_NL.utf8 | | | | | | | nl_NL.iso88591 | | | | | | |
Sous linux, la commande locale -a permet d'avoir une liste plus détaillée.
Ce script permet de tester le fonctionnement de quelques locales sur un système. Pour l'utiliser, il suffit de le copier sur votre site et de l'afficher dans votre navigateur web. Par exemple : http://wikiss.tuxfamily.org/test/test_gettext.php Il serait alors sympa de copier/coller le résultat dans un mail sur la liste de WiKiss avec le nom de votre hébergeur.
<?php
$testlangs = array('fr','fr_FR','fr_BE','fr_CA','en','en_US','en_GB','es','es_ES','de','de_DE','nl','nl_NL');
function testlocale($lang)
{
putenv("LANGUAGE=$lang");
$dir=setlocale(LC_ALL, $lang);
if ($dir == $lang)
return "<li>$lang : OK</li>\n";
else
return "";
}
if (extension_loaded('gettext'))
{
echo 'gettext is installed. Testing some locales ...<br/><ul>';
foreach ($testlangs as $lang)
{
echo testlocale($lang);
echo testlocale($lang.'.utf8');
echo testlocale($lang.'.iso885915');
echo testlocale($lang.'.iso88591');
}
echo '</ul>';
}
else
echo 'gettext is not installed :(';
?>
Voici un code php minimal d'utilisation de gettext :
// Choix de la langue
$domain="messages";
$lang = 'en_US.utf8';
putenv("LANGUAGE=$lang");
$dir=setlocale(LC_ALL, $lang);
echo 'setlocal:'.$dir."<br/>"; // si chaine vide alors la locale n'est pas installée et gettext ne fonctionnera pas !
// Spécifie la localisation des tables de traduction
bindtextdomain("$domain", "./locale");
// Choisit le domaine
$dir=textdomain("$domain");
echo gettext('Aide');
// normalement affiche Help :)
Le fichier de langues doit être ./locale/en_US/LC_MESSAGES/messages.mo
Pour générer le fichier .po :
xgettext --language=PHP --default-domain=messages --from-code=UTF-8 index.php
Puis pour le compiler en .mo:
msgfmt -o locale/en_US/LC_MESSAGES/messages.mo locale/en_US/LC_MESSAGES/messages.po
Voici quelques liens utiles pour gettext en php : %%
|