【问题标题】:Symfony 2 setting up translation filesSymfony 2 设置翻译文件
【发布时间】:2015-05-01 08:22:53
【问题描述】:

我未能为我的 Symfony 2 项目设置翻译。我在app\Resources\translations\message.en.yml 中手动创建了一个文件夹,它的内容是:

base:
    title:
        homePage: TeamERP IMS for BA

然后在我的包中的基本树枝模板上,我试图调用它:

    <title>
        {% block title %}
            {{ base.title.homePage|trans }}
        {% endblock %}
    </title>

然后在config.yml 我有以下内容:

framework:
    translator: { fallbacks: en }

我收到此错误:

 Variable "base" does not exist in TeamERPBaseBundle::base.html.twig at line 7 

我做错了什么?

编辑:在此处解决问题后:

{{ 'base.title.homePage'|trans }}

我停止收到错误,谢谢。现在页面没有给出错误,但没有在日志中加载带有警告的页面:

[2015-05-01 12:42:57] translation.WARNING: Translation not found. {"id":"base.title.homePage","domain":"messages","locale":"en"} []
[2015-05-01 12:42:57] translation.WARNING: Translation not found. {"id":"Home","domain":"messages","locale":"en"} []

Edit2:我的 symfony 2.6 版本存在某种问题。由于this,我刚刚做了一个composer update,它开始工作了。正常。

【问题讨论】:

    标签: symfony internationalization yaml


    【解决方案1】:

    首先它应该是messages.en.yml,如@xurshid29 所示,但最重要的是它应该是

    <title>
        {% block title %}
            {{ 'base.title.homePage'|trans }}
        {% endblock %}
    </title>
    

    在模板内。传递给trans 过滤器的值必须是字符串,但base.title.homePage|trans 将扩展为类似于$base-&gt;getTitle()-&gt;getHomepage() 的内容,因为它是Twig 变量语法。这就是您收到错误消息 Variable "base" does not exist 的原因。

    【讨论】:

    • 我改了好名字,也改了{{ 'base.title.homePage'|trans }}。我没有再收到错误,但是当我加载页面时,标题显示base.title.homePage 而不是TeamERP IMS for BA
    • 您是否启用了此处所述的翻译:symfony.com/doc/2.7/book/translation.html#configuration
    • @wti 文档说framework: -&gt; translator: -&gt; FALLBACKS: [en] (with array values),但在我的本地项目中,我将其设置为framework: -&gt; translator: -&gt; FALLBACK: en (without S),并且在您的配置中您正在混合这些,例如framework: -&gt; translator: -&gt; FALLBACKS: en。我认为这是导致问题的原因..
    • 我已经完成了:framework: translator: { fallback: en },但它不起作用。以及framework: translator: { fallback: [en] }s。我怎么知道 Symfony 2 是否正在加载翻译?
    【解决方案2】:

    message.en.yml 重命名为messages.en.yml,它应该可以工作。

    【讨论】:

    • @wti 看看 Stefan Gehrig 的回答
    【解决方案3】:

    您的 yaml 文件格式不正确,twig 中的翻译错误。

    message.en.yml

    base.title.homePage: TeamERP IMS for BA
    

    your.twig.html

    <title>
        {% block title %}
            {{ 'base.title.homePage' | trans }}
        {% endblock %}
    </title>
    

    您可以随意使用翻译组件,但最好用您的主要语言(TeamERP IMS for BA)写下正确的句子并进行翻译。考虑将翻译文件交给应该翻译的母语人士:

    message.de.yml

    TeamERP IMS for BA: TeamERP IMS für BA
    

    your.twig.html

    <title>
        {% block title %}
            {% trans %}TeamERP IMS for BA{% endtrans %}
        {% endblock %}
    </title>
    

    当然还要检查域名{% trans_default_domain "message" %}

    【讨论】:

    • 您的第一个假设是错误的。 Symfony 的 YAML 加载器支持结构化翻译文件,如下所示:symfony.com/doc/current/components/translation/usage.html
    • 我也试过这个:base.title.homePage: TeamERP IMS for BA 它不起作用,请检查我原来问题的编辑。
    • @StefanGehrig 谢谢,不知道并以这种方式使用它。
    • @wti 正如我在最后提到的,检查您的翻译域。
    猜你喜欢
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-19
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多