Reputation: 26
I have a site with various routes including languages:
eg:
/aboutus (english no language in the url)
/es/aboutus
/nl/aboutus
Here is my problem:
I create a language switcher in a twig template, and it works when I am on the ES page for example:
{% 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>
But it doesn't work when I am on the EN page because the _locale
is not in the URL. My routes:
_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 }
Does anyone have an idea how to solve this issue?
Upvotes: 1
Views: 533
Reputation: 2379
Did you try to simple create all links the same way, with merge({'_locale': 'xy'}), like this:
<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>
It should work.
[EDIT]:
And add en
to route
_event_translate:
path: /{_locale}/{nameid}
defaults: { _controller: Bundle:Event:index, _locale: en }
requirements:
_locale: es|nl|en
Upvotes: 1
Reputation:
I use language switcher like this and it works very well:
{% 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>
After that you should define _locale
in each route where the translation should be applied:
_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 }
Upvotes: 1