我有一个对象语言,我可以从管理页面添加、删除和更新语言。
我想要做的是添加一个语言切换器,我把这个 html/twig 代码:
{% for language in languages %}
<li><a href="{{ path('evr_footer_switch_language',{'locale': language.code | lower }) }}">{{ language.language | capitalize }} ({{ language.code }})</a></li>
{% endfor %}
还有一个 action the route for the action is evr_footer_switch_language,我在上面的切换器中使用的那个:
public function switchlanguageAction($locale = 'en') {
$this->get('session')->set('_locale', $locale);
$request = $this->getRequest();
$request->setLocale($locale);
return $this->redirect($request->headers->get('referer'));
}
这是我为动作/控制器 switchlanguageAction() 定义的路线
evr_footer_switch_language:
pattern: /language/switch/{locale}
defaults: { _controller: EvrHomeBundle:Footer:switchlanguage, locale: en }
在我看来原则上很简单,你点击语言的链接(从数据库中获取),将语言的代码(例如:'fr','en','zh'等......)发送到操作作为 $locale 变量,然后将会话/请求的 Locale 设置为此值。
问题是这些都不起作用,并且语言仍然是“EN”(默认值)。
注意根据本项目的要求,URL中不能提到语言(如fr/articles、en/articles),但是同一个URL(/articles/)可以用不同的语言显示,这就是为什么我没有'不要使用预定义的 slug (_locale)。
谢谢