How to Translate Validation Constraint Messages
Edit this pageWarning: You are browsing the documentation for Symfony 2.8, which is no longer maintained.
Read the updated version of this page for Symfony 7.0 (the current stable version).
How to Translate Validation Constraint Messages
If you're using validation constraints with the Form component, then translating
the error messages is easy: simply create 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:
1 2 3 4 5 6 7
// src/AppBundle/Entity/Author.php
namespace AppBundle\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:
1 2 3 4 5 6 7 8 9 10
// src/AppBundle/Entity/Author.php
use Symfony\Component\Validator\Constraints as Assert;
class Author
{
/**
* @Assert\NotBlank(message="author.name.not_blank")
*/
public $name;
}
1 2 3 4 5
# src/AppBundle/Resources/config/validation.yml
AppBundle\Entity\Author:
properties:
name:
- NotBlank: { message: 'author.name.not_blank' }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
<!-- src/AppBundle/Resources/config/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
http://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd">
<class name="AppBundle\Entity\Author">
<property name="name">
<constraint name="NotBlank">
<option name="message">author.name.not_blank</option>
</constraint>
</property>
</class>
</constraint-mapping>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
// src/AppBundle/Entity/Author.php
// ...
use Symfony\Component\Validator\Mapping\ClassMetadata;
use Symfony\Component\Validator\Constraints\NotBlank;
class Author
{
public $name;
public static function loadValidatorMetadata(ClassMetadata $metadata)
{
$metadata->addPropertyConstraint('name', new NotBlank(array(
'message' => 'author.name.not_blank',
)));
}
}
Now, create a validators
catalog file in the app/Resources/translations
directory:
1 2 3 4 5 6 7 8 9 10 11 12
<!-- app/Resources/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>
1 2
# app/Resources/translations/validators.en.yml
author.name.not_blank: Please enter an author name.
1 2 3 4
// app/Resources/translations/validators.en.php
return array(
'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.