Symfony2主机网址翻译

时间:2015-08-07 13:51:27

标签: php symfony translation yaml host

我是Symfony2的新手(使用2.7,因为它是一个现有的项目)。我必须为网址创建已翻译的网址,并在网址的主机名中添加区域设置。

为了更清楚,我会采取一些例子:

美国/英国版的

en.mywebsite.com/hello 要么 法语版 fr.mywebsite.com/bonjour

我有我的routing.yml文件,当然,它不起作用。

helloRoute:
   host: "{locale}.mywebsite.com"
   path: I don't know the correct input, it can be "/hello" or "/bonjour"
   defaults: {_controller: MyWebSiteBundle:Front:viewHello}
   requirements:
      locale: fr|en

有我的Nginx配置:

server {
   listen                               80;
   server_name                          ~^(?<region>\.|en|fr)\.\mywebsite.com;
    root                                /Applications/MAMP/htdocs/web/web;

    rewrite                             ^/app_dev\.php/?(.*)$ /$1 permanent;

    location / {
        index                           app_dev.php;
        try_files                       $uri @rewriteapp;
    }
    ...
}

这个Nginx配置没问题,可行。

我查了很多文档,但我不能这样做。 Symfony文档对此并不十分详细。

我需要翻译的网址取决于主机名区域设置。也许这对Symfony来说是不可能的。

提前谢谢。

2 个答案:

答案 0 :(得分:1)

我会创建两条路线:

表示英语

helloRoute:
   host: "{_locale}.mywebsite.com"
   path: "/hello"
   defaults: {_controller: MyWebSiteBundle:Front:viewHello}
   requirements:
      locale: en

for french

bonjourRoute:
   host: "{_locale}.mywebsite.com"
   path: "/bonjour"
   defaults: {_controller: MyWebSiteBundle:Front:viewHello}
   requirements:
      locale: fr

*请注意,您在语言环境变量中获得了前导下划线。

您可以将两条路线发送到同一个控制器,并根据区域设置有条件地显示。

答案 1 :(得分:1)

更一般地说,为了能够使用Symfony 2轻松处理URL的国际化,您可以使用BeSimple/BeSimpleI18nRoutingBundle

然后,如示例中所示,您可以执行类似的操作:

helloRoute:
   host: "{locale}.mywebsite.com"
   locales:  { en: "/hello", fr: "/bonjour" }
   defaults: {_controller: MyWebSiteBundle:Front:viewHello}
   requirements:
      locale: fr|en