我的网站有各种路线,包括语言:
例如:
/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 }
有谁知道如何解决这个问题?
答案 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 }