Ver índice de contenidos del libro

15.9. Traduciendo mensajes de validación

La mejor manera de entender la traducción de los mensajes de validación es mostrar un ejemplo. Supongamos en primer lugar que se ha creado el siguiente objeto PHP sencillo que se utiliza dentro de tu aplicación:

// src/Acme/BlogBundle/Entity/Author.php
namespace Acme\BlogBundle\Entity;
 
class Author
{
    public $name;
}

Añade las reglas de validación necesarias en el objeto con cualquiera de los métodos explicados en los capítulos anteriores. Utiliza la opción message para configurar un mensaje de error propio. Para garantizar por ejemplo que la propiedad $name no esté vacía, añade lo siguiente:

# src/Acme/BlogBundle/Resources/config/validation.yml
Acme\BlogBundle\Entity\Author:
    properties:
        name:
            - NotBlank: { message: "author.name.not_blank" }
// src/Acme/BlogBundle/Entity/Author.php
use Symfony\Component\Validator\Constraints as Assert;
 
class Autor
{
    /**
     * @Assert\NotBlank(message = "author.name.not_blank")
     */
    public $name;
}
<!-- src/Acme/BlogBundle/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="Acme\BlogBundle\Entity\Author">
        <property name="name">
            <constraint name="NotBlank">
                <option name="message">author.name.not_blank</option>
            </constraint>
        </property>
    </class>
</constraint-mapping>
// src/Acme/BlogBundle/Entity/Author.php
 
// ...
use Symfony\Component\Validator\Mapping\ClassMetadata;
use Symfony\Component\Validator\Constraints\NotBlank;
 
class Autor
{
    public $name;
 
    public static function loadValidatorMetadata(ClassMetadata $metadata)
    {
        $metadata->addPropertyConstraint('name', new NotBlank(array(
            'message' => 'author.name.not_blank',
        )));
    }
}

Crea un archivo de traducción bajo el dominio validators para los mensajes de validación y guárdalo en el directorio Resources/translations/ del bundle:

<!-- validators.en.xliff -->
<?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="1">
                <source>author.name.not_blank</source>
                <target>Please enter an author name.</target>
            </trans-unit>
        </body>
    </file>
</xliff>
// validators.en.php
return array(
    'author.name.not_blank' => 'Please enter an author name.',
);
# validators.en.yml
author.name.not_blank: Please enter an author name.