【问题标题】:Symfony2 translation: locale is ignoredSymfony2 翻译:语言环境被忽略
【发布时间】:2012-11-09 12:06:24
【问题描述】:

前段时间,我开始翻译我正在处理的 Symfony 2.1 网站,使用 URL 中通过 /{ _locale } 的“正确方式”。现在,大多数路由的翻译工作正常,但其中一些(/login、/register、...)一直使用默认语言(在本例中为 fr),因为它们的 { _locale } 部分没有网址。

通过调试面板,我意识到语言环境实际上并没有通过 url 导航更改(不像 this 让我相信的那样)。

然后我去了there,在那里我找到了设置侦听器的信息和链接,以便根据调用的路径更改会话区域设置。 所有默认语言环境声明(在 config.yml 和侦听器本身中)都是“fr”。

当我切换语言时,我实际上可以在调试面板上看到会话区域设置发生了变化。但是,翻译似乎被破坏了:即使默认语言是法语,并且会话区域设置为“fr”,每个翻译位都是用英语进行的。

这可能是从哪里来的?我该如何解决?

提前致谢。

更多技术信息:

routing.yml:

AuraeLCUserBundle:
    resource: "@AuraeLCUserBundle/Resources/config/routing.yml"
    prefix: /{_locale}/
    defaults: { _locale: fr }
    requirements:
        _locale: en|fr

树枝示例:

<p>{{ 'layout.greeting.welcome'|trans({}, 'AuraeLCUserBundle') }}</p>

【问题讨论】:

    标签: symfony translation symfony-2.1


    【解决方案1】:

    这里有 3 件事很关键。 默认语言(设置在config),如果您使用可翻译的学说扩展:

    # app/config/config.yml
    framework:
        session:          { default_locale: 'fr_FR' }
        translator:       { fallback: 'en' }
    .....
    
    stof_doctrine_extensions:
        default_locale: 'fr_FR'
    

    它们必须不同,因为默认语言环境不会出现时会出现循环引用异常。

    翻译者正在寻找后缀为fr_FR 的文件yaml|xml|gettext,例如:

    messages.fr_FR.yml
    messages.en.yml
    yourcatalogue.fr_FR.yml
    yourcatalogue.en.yml
    

    阅读本文了解更多详情:

    Change default locale in Symfony2

    http://symfony.com/doc/2.0/book/translation.html

    http://0hlsson.se/2011/07/27/symfony2-and-translatable-example/

    【讨论】:

    • 我这里没有使用Doctrine翻译,大部分翻译都是通过twig完成的。我检查了默认值(在 Symfony 2.1 中,会话:{ default_locale: 'fr_FR' } 被替换为 default_locale: %locale%),它们都是正确的(fr)。我还注意到,在 /register 或 /login 等页面上,现在已将语言环境考虑在内。我不明白的是为什么当 fr 同时在语言环境和 url 中时使用英语。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多