Symfony2 Interface Language

I followed the Symfony2 doc http://symfony.com/doc/2.0/book/translation.html#the-locale-and-the-url and added the locales to my routes. But I can’t find a way to carry the locale through the routes, because I place {{path ('myroute')}} in the branch template, but the locale always gets the return value instead of the current locale.

I tried {{path ('myroute', {'_locale': _locale})}}, but I got the error "Variable" _locale "does not exist".

Any idea?

+6
source share
4 answers

Fixed by {{ path('address', {'_locale': app.request.attributes.get('_locale')}) }} thanks to this topic http://www.mail-archive.com/ symfony-users@googlegroups.com /msg34838.html .

+12
source

In Symfony2.1, the locale is stored in the request, so you should use this:

 {{ path('address', {'_locale': app.request.locale}) }} 
+6
source

Two pages:

localhost.lo / xx / o

localhost.lo / xx / hello / {name}

where xx are the several locales described in routing.yml

- routing.yml

 home: resource: "@JetInformBundle/Resources/config/routing.yml" prefix: /{_locale} requirements: _locale: ^en|de|ru|uk|pl$ 

- JetInformBundle routing.yml

 hello: pattern: /hello/{name} defaults: { _controller: JetInformBundle:Default:index, name: 'alexander' } about: pattern: /about defaults: { _controller: JetInformBundle:Default:about } 

- DefaultController.php

 <?php namespace Jet\InformBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; use Symfony\Component\HttpFoundation\Request; class DefaultController extends Controller { public function indexAction($name, Request $request) { return $this->render('JetInformBundle:Default:index.html.twig', array('name' => $name, 'matches' => $this->matchAction($request))); } public function aboutAction(Request $request) { return $this->render('JetInformBundle:Default:about.html.twig', array('matches' => $this->matchAction($request))); } protected function matchAction(Request $request) { return $this->get('router')->match($request->getRequestUri()); } } 

- index.html.twig

 {% extends '::base.html.twig' %} {% block body %} <h1>{{ 'hello.name'|trans }} {{ name }}!</h1> <h3>{{ 'your.locale'|trans }} [{{ app.request.get('_locale') }}]</h3> {% include 'JetInformBundle:Default:locales.html.twig' with { 'uripath': 'hello', 'params': { 'name': app.request.get('name') } } %} {% include 'JetInformBundle:Default:matches.html.twig' with { 'matches': matches } %} <div> <p>{{ 'return.to'|trans }} <a href="{{ path('about', { '_locale': app.request.get('_locale') }) }}">About</a></p> </div> {% endblock %} 

- about.html.twig

 {% extends '::base.html.twig' %} {% block body %} <h1>{% trans %}about.page{% endtrans %}</h1> <h3>{% trans %}your.locale{% endtrans %} [{{ app.request.get('_locale') }}]</h3> {% include 'JetInformBundle:Default:locales.html.twig' with { 'uripath': 'about', 'params': {}} %} {% include 'JetInformBundle:Default:matches.html.twig' with { 'matches': matches } %} <div> <p>{% trans%}return.to{% endtrans%} <a href="{{ path('hello', { 'name': app.request.get('name'), '_locale': app.request.get('_locale') }) }}">Hello</a></p> </div> {% endblock %} 

- locales.html.twig

 {% if not params %} {% set params = {} %} {% endif %} <div class="langs"> <ul> <li> {% if app.request.get('_locale') == 'ru' %}  {% else %} <a href="{{ path(uripath, params|merge({ '_locale': 'ru' })) }}"></a> {% endif %} </li> <li> {% if app.request.get('_locale') == 'en' %} English {% else %} <a href="{{ path(uripath, params|merge({ '_locale': 'en' })) }}">English</a> {% endif %} </li> <li> {% if app.request.get('_locale') == 'uk' %} i {% else %} <a href="{{ path(uripath, params|merge({ '_locale': 'uk' })) }}">i</a> {% endif %} </li> <li> {% if app.request.get('_locale') == 'de' %} Deutsch {% else %} <a href="{{ path(uripath, params|merge({ '_locale': 'de' })) }}">Deutsch</a> {% endif %} </li> <li> {% if app.request.get('_locale') == 'pl' %} Polish {% else %} <a href="{{ path(uripath, params|merge({ '_locale': 'pl' })) }}">Polish</a> {% endif %} </li> </ul> </div> 

- matches.html.twig

 <h5>Matches</h5> <ol> {% for key, value in matches %} <li>{{ key }} : {{ value }} </li> {% endfor %} </ol> 
+3
source

Abbreviated Notation:

 {{ path('address', {'_locale': app.session.locale}) }} 
+2
source

Source: https://habr.com/ru/post/886768/


All Articles