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 d'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 traduction 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", "");

Attention, quel que soit le langage, setlocale doit être 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