2012-08-27 8 views
6

Problème de modification des paramètres régionaux sur un site Web Symfony 2.1.Modification des paramètres régionaux avec symfony 2.1

Je ne trouve pas un moyen de pouvoir changer la langue sans utiliser le _locale sur toutes les routes. Je sais que c'est contre the fundamental rule, mais ce contenu ne sera par exemple pas indexé par moteur car il est membre seulement.

En règle générale, je voudrais une méthode simple pour pouvoir changer les paramètres régionaux sur la demande (BC à partir de la version 2.1), ou sur la session, mais ne peut pas comprendre comment le faire en douceur. Je voudrais également éviter l'utilisation d'un auditeur pour cela.

fichier config.yml:

framework: 
    translator:  { fallback: %locale% } 
    session: 

fichier routing.yml:

route_change_lang: 
    pattern: /changelang/{newlang} 
    defaults: { _controller: AcmeCoreBundle:Default:switchLanguage, newlang: en } 
    requirements: 
     newlang: en|fr|de 

Une action simple pour mettre à jour les paramètres régionaux du routeur:

public function switchLanguageAction($newlang) 
{ 

    $request = $this->getRequest(); 

    $request->setLocale($newlang); 

    $referer_url = $this->get('request')->headers->get('referer'); 
    if ($referer_url != null) { 
     return $this->redirect($referer_url); 
    } else { 
     return $this->redirect($this->generateUrl('route_home')); 
    } 
} 

Quel est le problème? Je suppose que cela est lié à l'ensemble default_locale dans le fichier config.yml principal, mais la documentation n'est pas vraiment claire, aucune aide/indice apprécié

+0

Je suis exactement le même problème. Avez-vous trouvé une solution s'il vous plaît? – EnchanterIO

Répondre

-1

Si vous définissez les paramètres régionaux dans la demande, ceci est simplement utilisé pour la demande en cours . La prochaine fois qu'une demande est émise, default_locale sera utilisé. Même si maintenant (2.1) les paramètres régionaux sont définis dans la requête au lieu de la session, "Il est également possible de stocker les paramètres régionaux dans la session plutôt que sur une base par requête. " (à partir des docs). Donc, vous devez faire:

$this->get('session')->set('_locale', $newlang); 
+1

Merci pour votre essai, je prends aussi beaucoup de temps pour lire attentivement la documentation, mais malheureusement, cela ne fonctionne pas du tout. Les paramètres régionaux ne sont jamais modifiés ou sont toujours définis sur default_locale. Cela peut être un bug en fait, mais la version symfony 2.1 est encore jeune, donc je ne sais pas, un autre indice? –

0

Restaurez l'ancien comportement comme expliquer https://github.com/symfony/symfony/blob/master/UPGRADE-2.1.md#httpfoundation-1 Et utiliser le morceau de code de Carlos Granados.

Vous pouvez également lire mon autre réponse https://stackoverflow.com/a/12952999/520114

+0

@ webda2I J'ai essayé cette solution mais je n'arrive pas à la faire fonctionner. Créé l'auditeur mais ne semble pas changer quoi que ce soit. Avez-vous réussi à le faire fonctionner? –

+0

Avez-vous bien le créer dans votre propre paquet avec le bon espace de noms et le déclarer dans votre service.xml ou autre? – webda2l

+0

@ webda2I J'ai posé une nouvelle question ici: http://stackoverflow.com/questions/12951792/set-locale-in-symfony-2-1, serait bien si vous pouviez jeter un oeil –

1

Je suis venu à travers le même problème, étant donné que nous ne pouvons pas » lieux d'utilisation dans nos urls (problèmes seo-). Nous utilisons aussi des locales comme en_US et celles-ci sont stockées dans une configuration en dehors de l'accès direct au framework. Ce que j'ai fait est d'enregistrer un écouteur d'événement et d'accrocher dans l'événement onKernelRequest. Là, je vérifie si les paramètres régionaux sont définis dans la session, sinon, je l'ajoute à la fois, demande et session. De cette façon, le framework continue à se comporter comme avant 2.1 Si vous avez besoin de plus d'informations sur comment faire cela, commentez et je vais éditer quelques exaples ici :-)

Questions connexes