Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to customize/localize Assert messages in Symfony2?

Tags:

symfony

When you use @Assert\NotBlank constraint and the given field is empty, then you get the error:

This value should not be blank

I would like to change this message application-wide, without changing Symfony2 source code. How to accomplish that?

like image 331
Dawid Ohia Avatar asked Jan 24 '12 14:01

Dawid Ohia


2 Answers

Cutomizing validation error messages is quite simple, but can seem tricky at first.

Default locale

First of all you should change the default locale of your application. In versions 2.0.x the correct value to change is framework.session.default_locale. For future reference, starting from 2.1.0 it'll be framework.default_locale. Consult the docs for correct syntax.

A locale should consist of your language and region and is defined as language_REGION (list of languages, list of countries). The locale used in Germany for german would be de_DE for example.

Validation messages

Validation messages are hard coded in their respective constraint classes.

Translating validation messages

Symfony uses Twig to render all the validation messages. The process itself is complicated and falls out of the scope of this question, but the important part is that each constraint message is sent through a translation filter, which depending on the user's locale (default_locale by default) translates the messages to the proper language.

To change any of the translations, simply copy the validation translation file from vendor/symfony/src/Symfony/Bundle/FrameworkBundle/Resources/translations/validators.{lang}.xlf to app/Resources/translations/validators.{lang}.xlf where {lang} is the language part of your default locale.

Having done the former, simply change the default messages to what ever you see more fit. If the language you need support for doesn't exist, copy any translation file to the same directory and modify that file instead.

To read more about how translation works in Symfony2, visit the official documentation on translation.

like image 78
kgilden Avatar answered Sep 17 '22 19:09

kgilden


Additionally to the instructions by gilden, you have to make sure the framework.translator block in config/config.yml is uncommented (it's commented by default nowadays). If you don't do that, you'll still end up with the original English messages.

like image 37
Denvercoder9 Avatar answered Sep 17 '22 19:09

Denvercoder9