如何在Symfony2中自定义/本地化断言消息?

时间:2012-01-24 14:03:49

标签: symfony

当您使用@Assert\NotBlank约束并且给定字段为空时,您会收到错误:

  

此值不应为空

我想在应用程序范围内更改此消息,而不更改Symfony2源代码。怎么做到这一点?

3 个答案:

答案 0 :(得分:20)

Cutomizing验证错误消息非常简单,但最初看起来很棘手。

默认区域设置

首先,您应该更改应用程序的默认语言环境。在版本2.0.x中,要更改的正确值为framework.session.default_locale。为了将来参考,从2.1.0开始,它将是framework.default_locale。请参阅the docs以获取正确的语法。

区域设置应包含您的语言和区域,并定义为language_REGIONlist of languageslist of countries)。德国用于德语的语言环境例如de_DE

验证消息

验证邮件在各自的constraint classes中进行了硬编码。

翻译验证消息

Symfony使用Twig呈现所有验证消息。该过程本身很复杂,不属于这个问题的范围,但重要的是每个约束消息都是通过翻译过滤器发送的,这取决于用户的语言环境(默认为default_locale)将消息翻译成适当的语言。

要更改任何翻译,只需将验证翻译文件从vendor/symfony/src/Symfony/Bundle/FrameworkBundle/Resources/translations/validators.{lang}.xlf复制到app/Resources/translations/validators.{lang}.xlf,其中{lang}是默认语言区域的语言部分。

完成前者之后,只需将默认消息更改为您认为更合适的内容即可。如果您需要支持的语言不存在,请将任何翻译文件复制到同一目录并修改该文件。

要了解有关翻译在Symfony2中的工作原理的更多信息,请访问translation上的官方文档。

答案 1 :(得分:3)

除了gilden的说明之外,您还必须确保framework.translator中的config/config.yml块已取消注释(现在默认情况下会对其进行注释)。如果你不这样做,你仍然会得到原始的英文信息。

答案 2 :(得分:0)

如果有人在 2021 年有疑问,我只需将“错误”(eng) 约束消息切换为“Erreur”(fr):

  1. 转到您的 config/packages/translation.yaml 文件

  2. 通过将“en”替换为“fr”(或您的语言)来编辑它:Image as an example of the edited code

  3. 在你的本地主机上测试: Image as an example of the test post-edited

注意:

  1. 这是我用来帮助我的Symfony 5.2 doc
  2. 我所做的只是设置了一个 Default_locale(!!不检测用户来自哪里!!)