Bonjour à tous,

J'ai récemment débuté mon introduction à Symfony2, et j'ai un peu de difficulté avec l'internationnalisation ( i18n ) des locales; mettre en place une logique efficace.

Mon but est simple, faire comme microsoft.com: lorsqu'un utilisateur accède à la route /, déterminer la locale la plus appropriée, et le rediriger vers la page d'accueil correspondante. Si aucune locale ne correspond, attribuer la locale par défaut à l'utilisateur.

Donc déjà, il me faut savoir:

1- Comment définir les locales que mon site supportera.

Pour se faire, j'ai créé l'entré suivante dans app/config.yml:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
parameters:
    supported_locale: [fr, en, es]
Ce qui me permet d'y avoir accès à partir de n'importe quel contrôlleur de la façon suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
$this->container->getParameter('supported_locale');
Question: Suis-je en train d'essayer de ré-inventer quelque chose qui existe déjà dans Symfony2 ?


2- Comment rendre fonctionnel la détection de la locale ?
J'ai besoin de traduction différentes pour les locales en_CA et en_US.
En fait, en_US sera la version anglaise par défaut, donc je pourrais dire que j'ai besoin de en et en_CA.

Lorsque je regarde la valeur de $this->get('session')->getLocale(), j'obtiens toujours 'en', malgré que mon navigateur soit configuré pour prioriser fr_CA, fr, en.

Question: Pourquoi est-ce que symfony2 ne détecte pas bien ma locale ? ( Lien à faire avec la question #1 ?)
Edit: $this->getRequest()->getPreferredLanguage()

3- Comment accéder à la locale par défaut ?

Un petit var_dump($this->get('session')); montre rapidement qu'il existe une variable protected 'defaultLocale' => string 'en' (length=2) dans l'objet Symfony\Component\HttpFoundation\Session. Or, il n'existe aucune méthode d'accès à cette propriété.

Question: Comment suis-je supposer pouvoir la récupérer à l'intérieur d'un controlleur ?

Note: Si possible sans ajouter ceci dans app/config.yml:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
parameters: 
    default_locale: %locale%

Note concernant les routes: j'utilise le bundle BeSimpleI18nRoutingBundle() pour gérer l'internationnalisatio de mes routes.