我使用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.yml
和validators.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