Symfony2+Twig,翻译中的变量返回“消息必须是一个简单的文本”


Symfony2+Twig, variable in translation return "A message must be a simple text"

当我编写普通PHP时,我只是这样做:

printf(_("Hello %s !"), $name);

现在对于Twig,我必须使用trans标签。所以我已经复制/粘贴了文档示例,下面是我的完整模板:

{% extends 'MyAppBundle::layout.html.twig' %}
{% block content %}
    <h1>
        {% trans %}
            Hello {{ name }}!
        {% endtrans %}
    </h1>
{% endblock %}

为什么Symfony返回以下异常?

消息必须是"MyAppBundle::home.html.twig"中的简单文本

500内部服务器错误- Twig_Error_Syntax

前一个答案中缺少的一位是"with"部分,该部分用于替换消息的可变部分。

{% trans with {'%name%':name} %}Hello %name%!{% endtrans %}

Symfony2中翻译的精确语法与独立的Twig中略有不同。您将需要查看Symfony2文档,以获取分支模板中的翻译,可以在这里找到。正确的语法应该是这样的:

{% trans %}Hello %name%!{% endtrans %}

我有一个类似的问题:传递我的翻译路径到trans过滤器,我需要连接一个字符串和一个变量,然后转换成小写。

这里不使用{% trans %}{% endtrans %},而是使用trans过滤器:

<span>{{ ('statuses.' ~ status | lower) | trans }}</span>

假设翻译中有:

- status:
  - failed: The task has failed

,在模板中你传递变量name和值FAILED