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']); } }
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 }