Я последовал за Symfony2 doc http://symfony.com/doc/2.0/book/translation.html#the-locale-and-the-url и добавил локали к своим маршрутам. Но я не могу найти способ нести локаль через маршруты, поскольку я помещаю {{path ('myroute')}} в шаблон ветви, но локаль всегда получает запасное значение вместо текущей локали.
Я попробовал {{path ('myroute', {'_locale': _locale})}}, но я получил ошибку «Variable» _locale «не существует».
Есть идеи?
Исправлено с {{ path('address', {'_locale': app.request.attributes.get('_locale')}) }}
благодаря этой теме http://www.mail-archive.com/symfony-users @ googlegroups.com / msg34838.html .
В Symfony2.1 языковой стандарт сохраняется в запросе, поэтому вы должны использовать это:
{{ path('address', {'_locale': app.request.locale}) }}
Две страницы:
localhost.lo / хх / о
localhost.lo / хх / привет / {имя}
где xx – несколько локалей, описанных в 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>
Сокращенная нотация:
{{ path('address', {'_locale': app.session.locale}) }}