如何在树枝模板中使用区域设置的最佳做法是什么:
例如:
我有2种语言( ES 和 EN ),默认语言为ES,对于我的主页,我为/
创建2路由语录(默认语言,这种情况ES)和我的Controller文件中的/{_locale}/
(对于其他语言)。
现在我需要将我的twig模板的locale参数添加到我的URL中,但前提是我不会使用我的默认语言。
手动重写URL工作正常,但是在我的twig模板上创建时,如何将语言环境参数添加到URL中有什么简单方法?
变量语言环境的实际值可以传递给Controller,但有没有更好的方法来获取它?
修改
/**
* @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>
我得到了
找不到“GET / branches”的路由我使用此网址http://localhost:8080/en/branches(工作正常)和http://localhost:8080/branches(错误)我必须使用以下内容:
/**
* @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');
}
使用路径生成的网址没有问题,但是如果我在浏览器中删除了我网址中的区域设置参数,则会收到此错误。
非常感谢任何有用的建议
答案 0 :(得分:2)
translator: { fallbacks: ['%locale%'] }
在同一个文件中声明所需的变量:
parameters:
locale: en
app.locales: en|lv|ru
在routing.yml中声明您需要的路线,如下所示:
contact_us:
path: /{_locale}/contact
defaults:
_controller: 'AppBundle:Default:contact'
_locale: '%app.locales%'
{{ path('another_route') }}
,则another_route
。同样,对于单个文本翻译,请使用{{ 'home.title'|trans }}
。答案 1 :(得分:1)
将您的语言环境保存到Cookie中,然后在您的twig文件中创建<a href="{{ path('your-path-name', {'locale': app.request.cookies.get('LOCALE_COOKIE')}) }}">
我不确定您是否会收到错误或空值(这将帮助您在控制器路由中使用默认语言环境)如果未设置cookie但您应该尝试使用它。