【问题标题】:Twig form_errors function doesn't load translation message in validators.lang.ymlTwig form_errors 函数不会在 validators.lang.yml 中加载翻译消息
【发布时间】:2012-02-24 16:34:53
【问题描述】:

我正在使用 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 的内容放入我的另一个包中时,它可以工作。

【问题讨论】:

标签: php symfony doctrine doctrine-orm twig


【解决方案1】:

您可以强制翻译覆盖 field_errors 表单块。

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

{% 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多