[英]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.