我有多语言站点的路由问题。这里是routing.yml中(仅适用于一个包,但其他人都是一样的)Symfony2路由多语言站点
icoo_pitanja_route:
pattern: /{_locale}/najcesca-pitanja
defaults: { _controller: IcooPitanjaBundle:Pitanja:pitanja, _locale:hr }
requirements:
_locale: hr|en|de
icoo_pitanja_route:
pattern: /{_locale}/common-questions
defaults: { _controller: IcooPitanjaBundle:Pitanja:pitanja, _locale:en }
requirements:
_locale: hr|en|de
啊,我的页面的顶部,我有3个链接来更改语言克罗地亚(默认),英语和德语。制造环节改变他们的代码是这样的......
{% set requestParams = app.request.attributes.get('_route_params') %}
{% set requestRoute = app.request.attributes.get('_route') %}
<div class='languages col-xs-4'>
<a href="{{ path(requestRoute, requestParams|merge({'_locale' : 'hr'})) }}" class='col-xs-3'><span class='real-link'>croatian</span><span></span></a>
<a href="{{ path(requestRoute, requestParams|merge({'_locale' : 'en'})) }}" class='col-xs-3'><span class='real-link'>english</span><span>|</span></a>
<a href="{{ path(requestRoute, requestParams|merge({'_locale' : 'de'})) }}" class='col-xs-3'><span class='real-link'>deutch</span><span>|</span></a>
</div>
真正的问题是在path()
树枝方法,使链接导航,上述路线的控制。它只为英文版创建路径。我认为这是最后一个,所以当我为德语添加一条路线时,它将生成该路线的路径。由于路径名icoo_pitanja_route
对英语和克罗地亚的版本相同的路线名称,path()
定义是这样的...
path('icoo_naslovna_route')
我想要什么,是当我点击克罗地亚,该网址是WWW .example.com/hr/najcesca-pitanja,英语www.example.com/en/common-questions。但paht()
方法选择最后一个,英文。
现在,有几种方法可以解决这个问题。其中之一就是为每种语言制作不同的路线。另一种是让它像这样...
pattern: (_locale}/{language-specific-link}
,并在每种语言的有效链接的阵列控制器处理它,然后,如果URL是有效的,返回正确的响应。如果没有,抛出未发现的异常,但我认为这使Symfony2路由的目的无效。
有没有人有任何想法如何处理这个问题?
是的,但文件指出,如果路线名称相同,则第一个赢得胜利。那么为什么这会成为一个问题呢?另外,如果第一条路径获胜,为什么path()方法选择最后一条创建链接。 –
'_locale'参数是特殊的。您可能无法像您的示例中那样显式设置它。这由内部通过'getLocale()'方法填充。我希望你的请求目前包含'en'作为语言环境,因此'en'路由。 –
感谢您的回答。我将切换到您的实施 –