Reputation: 1095
what is the best practise how to work with locale in the twig templates:
For example:
I have 2 languages (ES and EN), default language is ES, for my home page I create 2 Route Anotations for /
(for default language, in this case ES) and for /{_locale}/
(for other languages) in my Controller file.
And now I need to get locale parameter to my twig template to my URL, but only if I will not on my default language.
Manually rewrite URL works fine, but is there any easy way how add locale parameter to URL when I creating on my twig templates ?
The actual value of the variable locale can be passed to Controller, but is there any better way to got it in twig?
EDIT:
/**
* @Route(
* "/{_locale}/branches", name="branches",
* requirements={"_locale":"%app_locales%"}
* )
*
*/
public function indexAction(Request $request) {
return $this->render('branches/index.html.twig');
}
index.html.twig
<li class="{% if app.request.attributes.get('_route') starts with 'branches' %}active{% endif %}">
<a href="{{ path('branches') }}" class="">{{ 'header.menu.branches'|trans }}</a>
</li>
I got
No route found for "GET /branches" i use this URL http://localhost:8080/en/branches (works OK) and http://localhost:8080/branches (ERROR) I must use something like this:
/**
* @Route(
* "/branches/", name="branches_def",
* defaults={"_locale":"%locale%"},
* )
* @Route(
* "/{_locale}/branches/", name="branches",
* requirements={"_locale":"%app_locales%"}
* )
*
*/
public function indexAction(Request $request) {
return $this->render('branches/index.html.twig');
}
URL generating with path is OK, but if I delete locale parameter from my URL in my browser I got this error.
Thanks a lot for any usefull advice
Upvotes: 0
Views: 4051
Reputation: 953
translator: { fallbacks: ['%locale%'] }
in config.ymldeclare needed variables in the same file:
parameters:
locale: en
app.locales: en|lv|ru
declare your needed route in routing.yml like this:
contact_us:
path: /{_locale}/contact
defaults:
_controller: 'AppBundle:Default:contact'
_locale: '%app.locales%'
{{ path('another_route') }}
without parameters, in case another_route
declared with _locale placeholder. Also for single text translation use {{ 'home.title'|trans }}
.Upvotes: 2
Reputation: 1506
save your locale into a cookie and then inside your twig file create links like <a href="{{ path('your-path-name', {'locale': app.request.cookies.get('LOCALE_COOKIE')}) }}">
I am not sure if you will get an error or a null value (which will help you with your default locale in your controller route) if the cookie is not set but you should try it out.
Upvotes: 1