Configurer votre application pour l'i18n

Définir la locale

Afin d'offrir un contenu localisé aux utilisateurs de votre application, vous devez préciser à Stato la locale à utiliser pour la requête en cours, et pour cela, détecter la locale souhaitée par l'utilisateur. Le moyen le plus simple et le plus RESTful est de faire en sorte que la locale fasse partie de l'URL. Vous pouvez par exemple définir une route par défaut de ce type :

$map->connect(':locale/:controller/:action/:id', array('locale' => 'fr', 'controller' => 'home'));

Vous pouvez ainsi récupérer dans vos contrôleurs la locale souhaitée dans $this→params['locale']. Il vous suffit alors de créer un filtre dans votre ApplicationController :

class ApplicationController extends SController
{
    protected function initialize()
    {
        $this->before_filters->append('set_locale');
    }
 
    protected function set_locale()
    {
        SI18n::set_locale($this->params['locale']);
    }
}

Définir la locale en fonction des informations fournies par le client

Une des sources d'information possibles est l'entête Accept-Language qui est fournie notamment par les navigateurs. Une implémentation possible avec l'extension intl serait donc :

protected function set_locale()
{
    $locale = Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']); // fr_FR
    SI18n::set_locale(Locale::getPrimaryLanguage($locale)); // fr
}
 
i18n/config.txt · Last modified: 2009/04/08 00:50 by goldoraf
 
Except where otherwise noted, content on this wiki is licensed under the following license:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki