Routing Symfony4如何在URL中为所有控制器运行_localeprefix?

Routing Symfony4如何在URL中为所有控制器运行_localeprefix?,routing,locale,symfony4,Routing,Locale,Symfony4,我试图在我的网站上设置一个“国际化”。为了解决此问题,我需要将“locales”设置为所有控制器URL的前缀(例如:mywebsite.com/en/page),然后我在Symfony4文档中找到了此帮助: 我对这些文件进行了如下修改 config/routes.yaml config/services.yaml config/packages/translation.yaml 如果我按如下方式编写URL:mywebsite.com/en/page,一切正常,但如果我忽略在URL中编写_区域设

我试图在我的网站上设置一个“国际化”。为了解决此问题,我需要将“locales”设置为所有控制器URL的前缀(例如:mywebsite.com/en/page),然后我在Symfony4文档中找到了此帮助:

我对这些文件进行了如下修改

config/routes.yaml

config/services.yaml

config/packages/translation.yaml

如果我按如下方式编写URL:mywebsite.com/en/page,一切正常,但如果我忽略在URL中编写_区域设置,例如:mywebsite.com/page,它将返回404错误。 我希望它能到达mywebsite.com/en/page,因为“en”在我的文件中被指定为默认语言环境


我错过了什么?谢谢。

看来这个把戏很管用:

#config/services.yaml

parameters:
    app.locales: en|es|fr|ru|mg|
    locale: 'en'

只需在app.locales行的末尾添加一个,现在我就可以访问不带_locale前缀的控制器了Symfony 4.3.1的工作方法(可能也是早期的4.x,未测试)如下所示:

# config/routes.yaml
controllers:
    resource: '../../src/Controller/'
    type: annotation
    prefix:
        en: '' # don't prefix URLs for English, the default locale
        '*': '/{_locale}'
剩下的就跟问题一样。注意:使用此设置时,“/en/”是可选的,即它将以两种方式工作—有或没有。

在Symfony 4.3.1(不确定早期版本)上,这仍然需要双斜杠。例如:mywebsite.com//page
framework:
    default_locale: '%locale%'
    translator:
        paths:
            - '%kernel.project_dir%/translations'
        fallbacks:
            - '%locale%'
#config/services.yaml

parameters:
    app.locales: en|es|fr|ru|mg|
    locale: 'en'
# config/routes.yaml
controllers:
    resource: '../../src/Controller/'
    type: annotation
    prefix:
        en: '' # don't prefix URLs for English, the default locale
        '*': '/{_locale}'