我正在使用Symfony2翻译,以便在我的表单中显示错误消息。我的邮件位于我的捆绑包的validators.fr.yml
子文件夹中的Ressources/translations
中定义。我也在使用注释来设置要使用的消息。
问题是我的模板中没有显示该消息。我只获得了我在注释中定义的密钥。
我实体的代码示例:
/**
* 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;
在我的表单类中,我使用getDefaultOptions
选项实现了data_class
方法(不知道它是否有帮助):
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
的内容放入我的另一个捆绑包中时,它会起作用。
答案 0 :(得分:0)
您可以强制翻译覆盖 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