How to Translate Validation Constraint Messages¶
If you’re using validation constraints with the Form component, you can translate
the error messages by creating a translation resource for the
validators
domain.
To start, suppose you’ve created a plain-old-PHP object that you need to use somewhere in your application:
// src/Entity/Author.php
namespace App\Entity;
class Author
{
public $name;
}
Add constraints through any of the supported methods. Set the message option
to the translation source text. For example, to guarantee that the $name
property is not empty, add the following:
- Annotations
1 2 3 4 5 6 7 8 9 10
// src/Entity/Author.php use Symfony\Component\Validator\Constraints as Assert; class Author { /** * @Assert\NotBlank(message="author.name.not_blank") */ public $name; }
- YAML
1 2 3 4 5
# config/validator/validation.yaml App\Entity\Author: properties: name: - NotBlank: { message: 'author.name.not_blank' }
- XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
<!-- config/validator/validation.xml --> <?xml version="1.0" encoding="UTF-8" ?> <constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping https://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd"> <class name="App\Entity\Author"> <property name="name"> <constraint name="NotBlank"> <option name="message">author.name.not_blank</option> </constraint> </property> </class> </constraint-mapping>
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
// src/Entity/Author.php // ... use Symfony\Component\Validator\Constraints\NotBlank; use Symfony\Component\Validator\Mapping\ClassMetadata; class Author { public $name; public static function loadValidatorMetadata(ClassMetadata $metadata) { $metadata->addPropertyConstraint('name', new NotBlank([ 'message' => 'author.name.not_blank', ])); } }
Now, create a validators
catalog file in the translations/
directory:
- XML
1 2 3 4 5 6 7 8 9 10 11 12
<!-- translations/validators.en.xlf --> <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="author.name.not_blank"> <source>author.name.not_blank</source> <target>Please enter an author name.</target> </trans-unit> </body> </file> </xliff>
- YAML
1 2
# translations/validators.en.yaml author.name.not_blank: Please enter an author name.
- PHP
1 2 3 4
// translations/validators.en.php return [ 'author.name.not_blank' => 'Please enter an author name.', ];
You may need to clear your cache (even in the dev environment) after creating this file for the first time.