【问题标题】:Symfony2: How to translate custom error messages in form types?Symfony2:如何翻译表单类型中的自定义错误消息?
【发布时间】:2012-05-10 20:27:16
【问题描述】:

我需要从我的表单类型中翻译错误消息。这是我的表单类型代码:

class ReferFriendType extends AbstractType {

public function buildForm(FormBuilder $builder, array $options)
{
    $defaultSubject = "This is a default referral subject.";
    $defaultMessage = "This is a default referral message.";

    $builder->add('email1', 'email',array(
        'required' => true,
        'label' => 'Email 1* :',
        'attr' => array('class' => 'large_text'),
    ));
    $builder->add('email2', 'email',array(
        'label' => 'Email 2 :',
        'required' => false,
        'attr' => array('class' => 'large_text'),
    ));
    $builder->add('email3', 'email',array(
        'label' => 'Email 3 :',
        'required' => false,
        'attr' => array('class' => 'large_text'),
    ));
    $builder->add('email4', 'email',array(
        'label' => 'Email 4 :',
        'required' => false,
        'attr' => array('class' => 'large_text'),
    ));
    $builder->add('email5', 'email',array(
        'label' => 'Email 5 :',
        'required' => false,
        'attr' => array('class' => 'large_text'),
    ));
    $builder->add('subject', 'text', array(
        'data' => $defaultSubject,
        'required' => true,
        'label' => 'Subject* :',
        'attr' => array('class' => 'large_text'),
    ));
    $builder->add('message', 'textarea', array(
        'data' => $defaultMessage,
        'required' => true,
        'label' => 'Message* :',
        'attr' => array('rows' => '5', 'cols' => '40'),
    ));

}

public function getDefaultOptions(array $options)
{
    $collectionConstraint = new Collection( array(
        'fields' => array(
            'email1' => array(
                new Email(),
                new NotBlank(array(
                    'message' => 'You must enter atleast one email address for a valid submission',
                )),
            ),
            'subject' => new NotBlank(),
            'message' => new NotBlank(),
        ),
        'allowExtraFields' => true,
        'allowMissingFields' => true,
    ));

    return array(
        'validation_constraint' => $collectionConstraint,
        'csrf_protection' => false,
    );
}

public function getName()
{
    return 'referFriend';
}

}

我想将 getDefaultOptions() 方法中的“您必须输入至少一个电子邮件地址才能有效提交”翻译成法语。我在 messages.fr.yml 中添加了翻译。但它没有被翻译。任何想法如何做到这一点?

【问题讨论】:

    标签: forms internationalization symfony


    【解决方案1】:

    替换不是在validation.yml文件中设置的,而是由Validator设置的。

    validators.en.yml

    noFirstnameMinLimit: Please provide at least {{ limit }} characters
    

    validation.yml

    Acm\AddressBundle\Entity\Address:
        properties:
            firstname:
                - Length:
                    min: 3 
                    minMessage: "noFirstnameMinLimit"
    

    这适用于 Symfony 2.4

    【讨论】:

    【解决方案2】:

    很简单,见http://symfony.com/doc/current/book/translation.html#translating-constraint-messages 并在 /app/config/config.yml 中设置 default_locale 或使用 $this->get('request')->setLocale('ru');

    【讨论】:

      【解决方案3】:

      docs中有一个例子。

      【讨论】:

      • 这很清楚,但在我的情况下,我在我的表单类型中添加了验证。
      【解决方案4】:

      验证翻译转到 validators.LANG.yml 文件,而不是 messages.LANG.yml 文件。

      【讨论】:

      • 我尝试创建 validators.LANG.yml 并添加翻译,但它不起作用。
      • 它是否适用于自定义翻译键?实际上我正在尝试做这样的事情:'label' => $this->get('translator')->trans( 'create.label.startAt', array(), 'myDomain')
      • @svassr,每个约束都有 message 属性,您可以将其设置为您想要的任何自定义键。
      • 这对于通过EventListenerFormType->buildForm() 中添加的FormError 将如何工作?创建验证器..yml 并通过new FormError('form.msg_filetype') 添加错误不起作用。在 symfony 中,是否在创建 FormError 之前完成了翻译?
      猜你喜欢
      • 1970-01-01
      • 2020-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多