Bonjour,

J'ai mis en place l'internationalisation Symfony 4

Je rencontre un problème avec ma lise déroulante pour changer de langue.

                <div class="dropdown-menu dropdown-menu-right">
                    <a href="{{ path(app.request.attributes.get('_route'), { '_locale': 'fr' }) }}" class="dropdown-item"><img src="/template/images/flags/fr.png" alt=""> Français</a>
                    <a href="{{ path(app.request.attributes.get('_route'), { '_locale': 'de' }) }}" class="dropdown-item"><img src="/template/images/flags/de.png" alt=""> Deutch</a>
                    <a href="{{ path(app.request.attributes.get('_route'), { '_locale': 'it' }) }}" class="dropdown-item"><img src="/template/images/flags/it.png" alt=""> Italiano</a>
                    <a href="{{ path(app.request.attributes.get('_route'), { '_locale': 'en' }) }}" class="dropdown-item"><img src="/template/images/flags/en.png" alt=""> English</a>
                </div>

Cela fonctionne bien avec des routes simples du genre :

  • @Route("/{_locale}/blog", name="blog")
    mais si j'utilise cette route avec un slug :
  • @Route("/{_locale}/blog/{id}", name="blog_show")
    il me dit :
    An exception has been thrown during the rendering of a template ("Some mandatory parameters are missing ("id") to generate a URL for route "blog_show".").

une idée ?

2 réponses


Elyanor
Réponse acceptée

Hello,

Tu récupères la route actuelle mais tu ne lui renvois pas les paramètres nécessaires ;)

Un truc dans le genre devrait tout récupérer et réaffecter ta locale :

{{ path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')|merge({ '_locale': 'fr' })) }}

CVNeo
Auteur

Impec cela fonctionne.
Super merci :)