2

我正在尝试在我的网站上设置“国际化”。为了处理这个问题,我需要将“locales”设置为所有控制器 URL 的前缀(例如:mywebsite.com/ en /page),然后我在 Symfony4 文档中找到了这个帮助: https ://symfony.com /doc/current/routing/external_resources.html

我修改了这些文件如下

配置/routes.yaml

controllers:
    resource: '../src/Controller/'
    type: annotation
    prefix: /{_locale}
    requirements:
        _locale: '%app.locales%'
    defaults:
        _locale: '%locale%'

配置/服务.yaml

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

配置/包/translation.yaml

framework:
    default_locale: '%locale%'
    translator:
        paths:
            - '%kernel.project_dir%/translations'
        fallbacks:
            - '%locale%'

如果我按如下方式编写我的 URL:mywebsite.com/en/page,一切正常,但如果我省略在 URL 中编写 _locale,例如:mywebsite.com/page,它会返回 404 错误。我希望它能够到达mywebsite.com/en/page,因为“en”在我的文件中被指定为 default_locale。

我错过了什么 ?谢谢。

4

2 回答 2

2

看起来这个技巧可以解决问题:

#config/services.yaml

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

只需要添加一个| 在 app.locales 行的末尾,现在我可以在没有 _locale 前缀的情况下访问控制器

于 2018-01-01T23:31:47.827 回答
0

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/' 是可选的,即它可以双向工作——有或没有它。

于 2019-06-17T15:26:47.210 回答