Locale Symfony2

时间:2014-04-24 21:07:00

标签: symfony twig

我的网站有各种路线,包括语言:

例如:

/aboutus (english no language in the url)
/es/aboutus
/nl/aboutus

这是我的问题:
我在树枝模板中创建了一个语言切换器,当我在ES页面上时它可以工作:例如:

{% set lng = '/' ~ app.request.locale ~ '/' %}

<li>
  <a href="{{ path(app.request.get('_route'), app.request.get('_route_params'))|replace({ (lng): '/'}) }}">
    <i class="cus-gb"></i> 
    English
  </a>
</li>
<li>
  <a href="{{ path(app.request.get('_route'), app.request.get('_route_params')|merge({'_locale': 'es'})) }}">
    <i class="cus-es"></i> 
    Spanish
  </a>
</li>
<li>
  <a href="{{ path(app.request.get('_route'), app.request.get('_route_params')|merge({'_locale': 'nl'})) }}">
    <i class="cus-nl"></i> 
    Dutch
  </a>
</li>

但是当我在EN页面上时它不起作用,因为_locale不在URL中。我的路线:

_event_translate:
  path:  /{_locale}/{nameid}
  defaults: { _controller: Bundle:Event:index, _locale: en }
  requirements: 
    _locale: es|nl 
_event_default:
  path:  /{nameid}
  defaults: { _controller: Bundle:Event:index, _locale: en }

有谁知道如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您是否尝试以相同的方式简单地创建所有链接,使用merge({&#39; _locale&#39;:&#39; xy&#39;}),如下所示:

<li><a href="{{ path(app.request.get('_route'), app.request.get('_route_params')|merge({'_locale': 'en'})) }}"><i class="cus-gb"></i> English</a></li>
<li><a href="{{ path(app.request.get('_route'), app.request.get('_route_params')|merge({'_locale': 'es'})) }}"><i class="cus-es"></i> Spanish</a></li>
<li><a href="{{ path(app.request.get('_route'), app.request.get('_route_params')|merge({'_locale': 'nl'})) }}"><i class="cus-nl"></i> Dutch</a></li>

它应该有用。

<强> [编辑]:

en添加到路线

_event_translate:
  path:  /{_locale}/{nameid}
  defaults: { _controller: Bundle:Event:index, _locale: en }
  requirements: 
    _locale: es|nl|en

答案 1 :(得分:1)

我使用这样的语言切换器,效果很好:

{% set requestParams = app.request.attributes.get('_route_params') %}
{% set requestRoute = app.request.attributes.get('_route') %}
{% set locale = app.request.locale %}

<div class="language-icons">
    <ul>
        <li>
            <a href="{{ path(requestRoute, requestParams|merge({'_locale' : 'en'})) }}">en</a>
        </li>
        <li>
            <a href="{{ path(requestRoute, requestParams|merge({'_locale' : 'fr'})) }}">fr</a>
        </li>
        <li>
            <a href="{{ path(requestRoute, requestParams|merge({'_locale' : 'ru'})) }}">ru</a>
        </li>
    </ul>
</div>

之后,您应该在应用翻译的每条路线中定义_locale

_event_translate:
  path:  /{_locale}/{nameid}
  defaults: { _controller: Bundle:Event:index, _locale: en }
  requirements: 
    _locale: es|nl 
_event_default:
  path:  /{_locale}/{nameid}
  defaults: { _controller: Bundle:Event:index, _locale: en }