Changer la langue dans Symfony 2

Ce contenu a 5 ans et n'est donc peut-être plus à jour.

Vous souhaitez faire une application Symfony 2 multilingue ?
Ce n’est pas difficile, il suffit de modifier 4 fichiers.


PS: Je part du principe que vous avez déjà fait vos fichiers de traduction. Si ce n’est pas le cas, rendez-vous dans le Book Symfony 2 !

Premièrement, il faut créer un listener.
Créez le fichier VotreBundle/EventListener/LocalListener.php et collez-y ceci:

Ensuite, dans VotreBundle/Resources/config/services.yml (je travaille en YAML, je vous laisse adapter à vos besoins si vous êtes en XML ou autre), ajouter les lignes suivantes:

Il nous faut un contrôleur pour demander le changement de langue:

Et enfin, dans votre twig, mettez des petits boutons avec, par exemple, un drapeau:

And Voila ! 🙂

0 0 vote
Article Rating
S'abonner
Me notifier des
guest
14 Commentaires
plus anciens
plus récents plus de votes
Inline Feedbacks
View all comments
thomas

Bonjour,

Il manque une virgule dans l’anotation de la fonction du controller (ligne 7), remplacer par :

@Route(“/setlocale/{language}”, name=”setlocale”)

Sim

Salut, merci pour ton code 🙂
Quand je l’utilise moi j’ai un
ReflectionException in RegisterListenersPass.php line 101: Class Fw\FollowBundle\EventListener\LocaleListener does not exist

J’ai trouvé un post sur la même chose sur stackoverflow, mais pas de réponse. (je précise que, contrairement a la personne qui a eu le pb sur stack, je n’ai pas fait d’erreur sur le namespace)
As-tu eu le pb ? merci 🙂

Sim

Et bien en effet, c’est mon phpstorm qui a fait une mauvaise bidouille … j’aurais du vérifier ça avant de poster un msg.
Merci 🙂

sajjad

Tanx <3

Tom

Bonjour,Je me permets de vous contacter suite à votre tutoriel : Changer la langue dans Symfony 2.En effet, j’ai appliqué à la lettre ce que vous aviez fait, mais je suis tombé sur une erreur que je ne comprend pas et que je n’arrive pas à corriger.Ci-dessous mon erreur :InvalidArgumentException in RegisterListenerPass.php line 103:Service “front_bundle.locale_listener” must implement interface “Symfony\Component\EventDispatcher\EventSubscriberInterface”.Mon fichier : services.ymlservices: front_bundle.locale_listener: class: FrontBundle\EventListener\LocaleListenere arguments: [“%kernel.default_locale%”] tags: – { name: kermel.event_subscriber }Avez-vous une idée sur ce type d’erreur? Si quelqu’un l’a déjà traité. Je ne trouve rien sur le net.Merci par avance !

Tom

Merci d’avoir pris le temps de me répondre.
Oui justement c’était une erreur de saisie. J’ai corrigé mais toujours l’erreur s’affiche.

Tom

C’est bon j’ai trouvé la solution au problème. Il suffit de rajouter le namespace de mon bundle (FrontBundle) dans les fichiers: services.yml et LocaleListener.php.

Merci bcp ! A bientôt!

binto

et comment on rajoute le namespace de bundle dans le services.yml??? merci

Dodson

Salut Tom! Est-ce que vous pouvez détailler comment rajouter le namespace dans les fichiers: services.yml et LocaleListener.php?
Merci d’avance mon ami!

Thomas

Bonjour, merci pour ce tuto !

Je voulais savoir s’il était possible de détecter la locale de l’utilisateur et de la charger, tout en laissant la possibilité de choisir la langue via une liste déroulante ?

Pour le moment j’ai mis en place une liste déroulante qui fonctionne (juste français / anglais pour le moment) cependant quand je me rends sur la page d’accueil, c’est automatiquement la langue anglaise qui est chargée !

Savez-vous comment faire ? Merci d’avance !

Simon

Bonjour,J’ai un problème, lorsque je clique sur mon EN ou FR j’obtiens cette erreur:You have requested a non-existent service “request”. Did you mean one of these: “data_collector.request”, “fos_rest.request.param_fetcher”, “fos_rest.request.param_fetcher.reader”, “monolog.logger.request”, “request_stack”, “router.request_context”, “validate_request_listener”?et correspond à la ligne:$url = $this->container->get(‘request’)->headers->get(‘referer’);Merci d’avance pour votre réponse.