Symfony 6.2,没有实体的表单:如何翻译约束消息?

cygmwpex  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(144)

我有这个表格:

<?php

declare(strict_types=1);

namespace App\Form;

use App\Security\Validator\Constraints\PhoneValidator;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints\Email;
use Symfony\Component\Validator\Constraints\NotBlank;

class JobApplicationType extends AbstractType
{

    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        $builder
            ->add('email',options:[
                'label'=>'form.label.email',
                'constraints'=> [
                    new Email(message: 'form.error.email')
                ]
            ]);
    }

    public function configureOptions(OptionsResolver $resolver): void
    {
        $resolver->setDefaults([
            'translation_domain'=>'job-application'
        ]);
    }
}

这些翻译:

form:
  label:
    email: 'E-Mail'
  error:
    email: 'Invalid E-Mail'

标签forms.label.email将被正确翻译。当我将标签更改为forms.error.email时,它也被正确翻译。但无论我提供新电子邮件(message:'form.error.email')还是新电子邮件('message '='form.error.email']),约束消息都不会被翻译。
我使用Symfony 6.2.7
我做错了什么?
更新:使用翻译器接口:

$this->translator->trans('form.label.email',domain: 'job-application')

工作,但这似乎有点复杂,我

oyxsuwqo

oyxsuwqo1#

你可以在约束验证消息中使用翻译键,但是你需要把你的翻译放在validators.en.yaml中,因为域必须是验证器。我想你只是把messages. en. yaml放在里面。
顺便说一句,Symfony验证器消息不会自动提取。
希望对你有帮助!

相关问题