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:
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
3 parameters: supported_locale: [fr, en, es]
Question: Suis-je en train d'essayer de ré-inventer quelque chose qui existe déjà dans Symfony2 ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $this->container->getParameter('supported_locale');
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.
Partager