我的多语言网站存在路由问题。这里是routing.yml(仅适用于一个捆绑,但其他捆绑包相同)
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()
twig方法,该方法为上述路径控制的导航提供链接。它只为英文版创建路径。我认为它是最后一个,所以当我为德语设置路线时,它将为该路线生成路径。由于路径名为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路由的目的无效。
有没有人对如何处理这个问题有任何想法?
答案 0 :(得分:3)
因为您的路线名称相同。尝试更改路径名称:
icoo_pitanja_route_hr:
pattern: /{_locale}/najcesca-pitanja
defaults: { _controller: IcooPitanjaBundle:Pitanja:pitanja, _locale:hr }
requirements:
_locale: hr|en|de
icoo_pitanja_route_en:
pattern: /{_locale}/common-questions
defaults: { _controller: IcooPitanjaBundle:Pitanja:pitanja, _locale:en }
requirements:
_locale: hr|en|de
然后也改变相应的path
函数调用。
这是必需的,因为_locale
参数为special。