Как переводить сообщения ограничений валидации

Как переводить сообщения ограничений валидации

Если вы используете ограничения валидации с компонентном формы (form), тогда перевод сообщений об ошибках очень прост: создайте ресурс переводя для домена validators.

Для начала, представьте, что вы создали старый добрый PHP-объект, который вам нужно использовать где-либо в вашем приложении:

1
2
3
4
5
6
7
// src/AppBundle/Entity/Author.php
namespace AppBundle\Entity;

class Author
{
    public $name;
}

Добавьте ограничения через любой из поддержваемых методов. Установите опцию сообщений в тексте источника перевода.Например, чтобы гарантировать, что свойство $name не пусто, добавьте следующее:

  • Annotations
     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;
    }
    
  • YAML
    1
    2
    3
    4
    5
    # src/AppBundle/Resources/config/validation.yml
    AppBundle\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
    <!-- 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>
    
  • PHP
     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',
            )));
        }
    }
    

Теперь, создайте файл каталога valdiators в каталоге app/Resources/translations:

  • XML
     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>
    
  • YAML
    1
    2
    # app/Resources/translations/validators.en.yml
    author.name.not_blank: Please enter an author name.
    
  • PHP
    1
    2
    3
    4
    // app/Resources/translations/validators.en.php
    return array(
        'author.name.not_blank' => 'Please enter an author name.',
    );
    

Вам может понадобиться очистить ваш кеш (даже в окружени разработки) после создания этого файла в первый раз.

Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.