繁体   English   中英

如何翻译 symfony 表单错误消息?

[英]How to translate symfony form error messages?

对于 symfony 独立翻译组件,我使用:

$translator = new Translator('fr_FR');
$translator->addLoader('php', new \Symfony\Component\Translation\Loader\PhpFileLoader());
$translator->addResource('php', ROOT.'/translations/messages.fr.php', 'fr_FR');
$twig->addExtension(new TranslationExtension($translator));

翻译 symfony 表单标签工作正常。 要翻译 symfony 表单约束错误,我使用:

->add('firstname', TextType::class, [
        'constraints' => [new Assert\Length(['min' => 3, 
                                                                   'minMessage' => 'name.short',
                                                                 ])
                                  ]
    ])

messages.fr.php

我有

return [
    .....
    ...
    'name.short' => 'Name is short',
];    

其他表格标签也在此目录中。 标签翻译得很好,但对于表单错误,我得到name.short而不是它的值。 我犯了什么错误? 它是在寻找另一个地方找到翻译目录吗?

编辑:对于 twig 我使用这个没有缓存参数,

$twig = new \Twig\Environment($loader, [
    'strict_variables' => true,
    'optimizations' => -1,
    'debug' => true,
]);    

并且似乎没有设置 twig 缓存,对于独立的 symfony 表单和验证器我没有设置任何缓存,确定我检查了目录,没有设置缓存。 我还应该检查什么?

编辑2:

我也用过这个:

$translator = new Translator('fr_FR');
$translator->addLoader('php', new \Symfony\Component\Translation\Loader\PhpFileLoader());
$translator->addResource('php', ROOT.'/translations/validators.fr.php', 'fr_FR');
$translator->addResource('php', ROOT.'/translations/messages.fr.php', 'fr_FR');
$twig->addExtension(new TranslationExtension($translator));

在 translations/validators.fr.php 中,我有一个返回数组,其中元素 name.shor 像上面一样,但仍然不起作用。

验证消息的默认域不是默认的“消息”

尝试添加一个新的资源validators.fr.php .fr.php,并将消息放入此文件中。

请参阅框架文档,但我认为独立组件https://symfony.com/doc/current/validation/translations.html的过程相同

我想你必须尝试翻译文本的基本方法。

use Symfony\Contracts\Translation\TranslatorInterface;

class MyFormType extends AbstractType
{
    private $translator;
    
    public function __construct(TranslatorInterface $translator) 
    {
        $this->translator = $translator;
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('firstname', TextType::class, [
                'constraints' => [new Assert\Length([
                    'min' => 3, 
                    'minMessage' => $this->translator->trans('name.short'),
                ])
            ]

        // ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM