如何翻译验证约束消息
如果你在使用表单组件的验证约束,那么在翻译错误信息时会很容易:直接创建一个翻译源给 validators
这个 域 即可。
第一步,假设你已经创建了一个要用在程序某处的传统PHP对象如下:
|
// src/AppBundle/Entity/Author.php
namespace AppBundle\Entity;
class Author
{
public $name;
} |
添加约束时可以使用任何一种受到支持的方法。然后设置翻译源的文本信息选项。例如,为了保证 $name 属性不为空,添加以下代码:
|
// src/AppBundle/Entity/Author.php
use Symfony\Component\Validator\Constraints as Assert;
class Author
{
/**
* @Assert\NotBlank(message = "author.name.not_blank")
*/
public $name;
} |
|
# 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',
)));
}
} |
接下来,在 validators
目录下,为约束信息创建一个翻译源,此 xliff 文件一般置于bundle的 Resources/translations/
目录下。
1
2
3
4
5
6
7
8
9
10
11
12
|
<!-- 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> |
|
# validators.en.yml
author.name.not_blank: Please enter an author name. |
|
// validators.en.php
return array(
'author.name.not_blank' => 'Please enter an author name.',
); |