Twig form_errors函数没有';t在validators.lang.yml中加载翻译消息


Twig form_errors function doesn't load translation message in validators.lang.yml

我使用Symfony2翻译来在表单中显示错误消息。我的消息在我的捆绑包的Ressources/translations子文件夹中的validators.fr.yml中定义。我还使用注释来设置要使用的消息。

问题是消息没有显示在我的模板中。我只得到我在注释中定义的密钥

来自我的实体的代码示例:

/**
 * Nom du site de travail.
 *
 * @var string le nom du site de travail.
 *
 * @ORM'Column(
 *      name   = "nom",
 *      type   = "string",
 *      length = 255
 * )
 *
 * @Assert'NotBlank(message = "structure.siteTravail.nom.notnull")
 */
private $nom;

在我的表单类中,我已经用data_class选项实现了getDefaultOptions方法(不知道它是否有帮助):

public function getDefaultOptions(array $options)
{
    return array(
        'data_class' => 'My'FreakingBundle'Entity'SiteTravail'
    );
}

以下是validators.fr.yml:的内容

structure:
    siteTravail:
        nom:
            notnull: Le nom est obligatoire.

在我的Twig模板中,我使用以下代码来渲染字段的错误:

{{ form_errors(form.nom) }}

此外,翻译在app/config/config.yml:中激活

framework:
    translator: { fallback: fr }

我所有的翻译都在这个捆绑包的messages.fr.yml中完美地工作,我还有另一个同时使用messages.fr.ymlvalidators.fr.yml的捆绑包。

最奇怪的是,当我把validators.fr.yml的内容放在另一个捆绑包中时,它就起作用了。

您可以强制转换覆盖field_errors表单块。

因此,当您在树枝模板中呈现表单时:

{% form_theme form _self %}
{% block field_errors %}
{% spaceless %}
    {% if errors|length > 0 %}
        <ul>
            {% for error in errors %}
                <li>{{ error.messageTemplate|trans(error.messageParameters, 'validators')|trans }}</li>
            {% endfor %}
        </ul>
    {% endif %}
{% endspaceless %}
{% endblock %}
{% block content %}
    {# ... other stuffs ... #}
        {{ form_widget(form) }}
    {# ... other stuffs ... #}
{% endblock %}

如果您将翻译放在特定的域文件中(例如:"validators.lang.yml"),请使用以下语法:

<li>{{ error.messageTemplate|trans(error.messageParameters, 'validators')|trans({}, 'validators') }}</li>

在这里,您可以找到用于自定义替换的所有默认表单块:https://github.com/symfony/symfony/blob/master/src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig