我正在使用以下代码在Symfony中创建语言切换器:
<select title="Change Language" onChange="window.location.href=this.value">
<option value="{{ path(app.request.attributes.get('_route'), {'_locale':'en'}) }}" {% if app.request.locale == 'en' %} selected="selected" {% endif %}>English </option>
<option value="{{ path(app.request.attributes.get('_route'), {'_locale':'it'}) }}" {% if app.request.locale == 'it' %} selected="selected" {% endif %}>Italiano </option>
</select>
当我转到http://localhost:8000/app_dev.php/en/about
时,option
中的链接是正确的,即:/app_dev.php/en/about
和/app_dev.php/it/about
但是如果我在没有指定区域设置的情况下转到同一页面,在http://localhost:8000/app_dev.php/about
中创建了option
个不正确的链接:/app_dev.php/about?_locale=it
和/app_dev.php/about?_locale=en
我的控制器中的about动作如下所示:
/**
* @Route("/{_locale}/about", name="aboutUs", defaults={"_locale" = "en"}, requirements={"_locale" = "en|de|fr|es|it"})
* @Route("/about")
*/
public function aboutAction(){
return $this->render('default/frontend/about.html.twig');
}
我该如何纠正?
答案 0 :(得分:0)
首先,删除你的第二个@Route。
之后,安装https://github.com/schmittjoh/JMSI18nRoutingBundle 使用此捆绑包,您可以按照自己的意愿执行系统URL。
下来你有一个配置的例子。
jms_i18n_routing:
default_locale: en
locales: [es, it, fr, pl, pt, en, de, ca]
strategy: prefix_except_default