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
translator: { fallbacks: ['%locale%'] }
in config.yml declare 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 }}
. 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.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.