Symfony2根据语言区域设置创建路由

时间:2014-05-09 16:57:01

标签: php symfony

我正在为多语言网站实施翻译。一切正常,但当用户尝试更改语言时,语言保持不变。

这是路线...

index:
    path:  /{_locale}
    defaults: { _controller: HotelIndexBundle:Index:index , _locale:hr}
    requirements:
        _locale: hr|en

在twig模板中,我必须使用...链接到此路径

path('index');

让我说我的索引页面www.example.com(默认为' hr')。然后,用户将更改为www.example.com/en。有用。但是当它尝试使用路径(' index')返回hr时,页面将恢复为相同的www.example.com/en。

www.example.com/en/contact等其他网址参数也存在问题。如何将其更改为www.example.com/hr/contact并留在/联系页面?

2 个答案:

答案 0 :(得分:2)

看看JMSi18nRoutingBundle。它完全符合您的要求。

答案 1 :(得分:2)

  

让我说我在我的索引页面www.example.com(默认为   的 '小时')。然后,用户将更改为www.example.com/en。有用。但是什么时候   它尝试使用path('index')返回hr,页面恢复为   同样www.example.com/en。

您应该在config.yml文件中进行以下配置:

<强> config.yml

framework:
    translator:      { fallback: "%locale%" }
    default_locale:  "%locale%"

locale参数应在parameters.yml文件中定义:

<强> parameters.yml

parameters:
    locale: hr
  

其他网址参数也存在问题,例如   的 www.example.com/en/contact。如何将其更改为    www.example.com/hr/contact并留在/联系页面?

可以这样做:

{% set requestParams = app.request.attributes.get('_route_params') %}
{% set requestRoute = app.request.attributes.get('_route') %}

<a href="{{ path(requestRoute, requestParams|merge({'_locale' : 'en'})) }}">en</a>
<a href="{{ path(requestRoute, requestParams|merge({'_locale' : 'hr'})) }}">hr</a>