【问题标题】:Symfony2 Validator messagesSymfony2 验证器消息
【发布时间】:2014-10-17 09:10:32
【问题描述】:

这里我的 User.php 扩展了 FOSUserBundle:

class User extends AbstractUser
{
    /**
     * @var string
     *
     * @Assert\Email(
     *     message = "Please insert a valid email.",
     *     checkMX = true
     *    )
     * @Assert\Regex(
     *     pattern="# #",
     *     match=false,
     *     message="Your mail can't contain spaces."
     * )
     * @Assert\NotBlank(groups={"step1", "step0", "edit"})
     *
     */
    protected $email;

    /**
     * @var string
     *
     * @ORM\Column(name="first_name", type="string", length=255, nullable=false)
     * @Assert\NotBlank(groups={"step1", "edit"})
     * @Assert\Regex(
     *                pattern="#(((\.|,|-| )?[0-9]){7}|hotmail|laposte|yopmail|wanadoo|gmail|yahoo|\.fr|\.co|\.it|\.be|\.de|\.es|\.nl|\.com|\.uk|\.at|\.au|\.ch|@)#",
     *                match=false,
     *                message="Warning: Be sure your ad does not contain an email address or phone number.")
     * @Groups({"whitelabel", "mobile","full","large","small"})
     */
    protected $firstName;

    [...]
}

还有我的 validators.fr.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="52">
                <source>Your mail can't contain spaces.</source>
                <target>Votre mail ne peut pas contenir d'espaces.</target>
            </trans-unit>
            <trans-unit id="53">
                <source>Please insert a valid email.</source>
                <target>Merci d'insérer un email valide.</target>
            </trans-unit>
            <trans-unit id="100">
                <source>Warning: Be sure your ad does not contain an email address or phone number.</source>
                <target>Attention: Ce champ ne doit pas comporter d'adresse email ou numéro de téléphone.</target>
            </trans-unit>
        </body>
    </file>
</xliff>

当我把邮件放在名字中时,错误信息是正确的法语翻译,但是当我输入空格或无效邮件时,错误信息是英文。

有人知道为什么吗?

谢谢!

编辑:其他事情可能有助于理解这一点,当我在文档中放置电子邮件验证时,{{value}} 未与电子邮件一起转换,我的错误中确实有“{{value}}”留言 - http://symfony.com/doc/current/reference/constraints/Email.html

/**
 * @Assert\Email(
 *     message = "The email '{{ value }}' is not a valid email.",
 *     checkMX = true
 * )
 */
 protected $email;

【问题讨论】:

    标签: symfony validation


    【解决方案1】:

    我终于找到了错误:

    问题是我没有在 twig 中使用 form_errors,而是我自己的循环来显示错误。

    {% if form.email.vars.errors is not empty %}
        {% for error in  form.email.vars.errors %}
            <li>{{ error.messageTemplate|raw }}</li>
        {% endfor %}
    {% endif %}
    

    而且它缺少反式

    {% if form.email.vars.errors is not empty %}
        {% for error in  form.email.vars.errors %}
            <li>{{ error.messageTemplate|transchoice(error.messagePluralization, error.messageParameters, 'validators')|raw }}</li>
        {% endfor %}
    {% endif %}
    

    【讨论】: