Toujours du texte

Publié le par Peck

Cet article est sur http://linux-attitude.fr/post/Toujours-du-texte

Niveau
:
Résumé : setlocale ; xgettext ; gettextize

Maintenant vous savez utiliser gettext. Allons un peu plus loin. Vous avez internationalisé votre application et commencé à la traduire. Mais vous voudriez aussi l'installer et la rendre utilisable par tous facilement.

Pour cela il faut choisir la bonne locale en fonction de l'utilisateur. La solution retenue dépendra du type de l'application.

Locale web
Si c'est une application web, basez vous sur la langue du navigateur, fournie pendant la négociation http ou la lange du serveur par défaut.

<?php
// locale par defaut (du serveur)
$locale = getenv('LANG');

// locale préférée du client
if ( isset( $_SERVER["HTTP_ACCEPT_LANGUAGE"] ) )
{
        $languages = strtolower( $_SERVER["HTTP_ACCEPT_LANGUAGE"] );
        $language = preg_replace( "/^([^,;]*?)[,;].*$/","$1", $languages );

        if ( $language != "" )
        {
                $locale = $language;
                $locale .= "_";
                // c'est un peu pauvre comme choix du pays et c'est pas garanti que ca marche
                // si vous avez une bonne idée n'hesitez pas
                $locale .= strtoupper($language);
                if ( $charset == "utf8" || $charset == "utf-8" )
                {
                        $locale .= "UTF-8";
                }
        }
}

setlocale(LC_ALL, $locale);
?>

Notez qu'ici on modifie LC_ALL qui impacte tous les éléments de locale (date, monnaie ...). Si vous ne voulez modifier que la locale liée à la tradution utilisez LC_MESSAGES à la place.


Locale locale
Si votre application est un programme local, basez vous sur la locale du système grâce aux variables d'environnement. Pour cela, il suffit d'appeler simplement setlocale :

/* code C, transposable aisément :-) */
setlocale( "LC_ALL", "");


Atention, quel que soit le langage, setlocale doit etre appelée avant vos appels à bindtext et textdomain.



Industrialisation


Pour installer vos traductions sur un système unix, mettez les dans /usr/share/locale/fr/LC_MESSAGES.


Il vous faudra aussi maintenir vos traductions, pour cela vous devrez utiliser régulièrement xgettext pour extraire vos chaînes mises à jour. De plus à force de traduire, vous verrez que ce n'est pas toujours drôle de repérer les dernières modifications ou de faire des recherches avec un éditeur de texte normal. C'est pourquoi il vous faudra apprendre à utiliser un outil comme poedit pour éditer les fichiers .po


Publié dans développement

Pour être informé des derniers articles, inscrivez vous :
Commenter cet article