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

Daw*_*hia 8 symfony

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

此值不应为空

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

gil*_*den 20

Cutomizing验证错误消息非常简单,但一开始看起来很棘手.

默认语言环境

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

语言环境应包括你的语言和地区,并被定义为language_REGION(语言列表,国家列表).de_DE例如,德国用于德语的语言环境就是这样.

验证消息

验证消息在其各自的约束类中进行硬编码.

翻译验证消息

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

要更改任何翻译,简单地验证翻译文件从复制vendor/symfony/src/Symfony/Bundle/FrameworkBundle/Resources/translations/validators.{lang}.xlfapp/Resources/translations/validators.{lang}.xlf这里{lang}是您的默认语言环境的语言部分.

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

要阅读有关翻译如何在Symfony2中工作的更多信息,请访问有关翻译的官方文档.

  • 从Symphony 2.1开始,文件现在位于`vendor/symfony/src/Symfony/Component/Validator/Resources/translations/validators.{lang} .xlf` (7认同)
  • 只是为了更新这个新symfony版本行为的答案:在**symfony 2.5**中,我没有必要复制文件来启用表单和验证反馈消息的翻译.我只需要... a)在parameters.yml(`locale:xy`)中设置所需的标准语言环境b)在config.yml中启用翻译服务(默认情况下注释掉,并用你想要的后备语言更新 - 在我的情况下"en")`framework:translator:{fallback:"en"}`c)确保config.yml中的默认语言环境设置为来自parameters.yml的定义语言环境:`framework:default_locale:"%locale% "` (3认同)