Как перевести сообщения об ошибках формы Symfony? - PullRequest
1 голос
/ 13 октября 2019

для компонента автономного перевода 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 = new \Twig\Environment($loader, [
    'strict_variables' => true,
    'optimizations' => -1,
    'debug' => true,
]);    

и кажется, что кеш ветки не установлен, для автономного SymfonyФорма и валидатор Я не установил никакой кеш, наверняка проверил каталоги, кеш не установлен. Что еще я должен проверить?

EDIT2:

Я тоже использовал это:

$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 как выше, но все еще не работает.

Ответы [ 2 ]

1 голос
/ 13 октября 2019

Домен по умолчанию для сообщения проверки не является «сообщением» по умолчанию

Попробуйте добавить новый ресурс validators.fr.php и поместите сообщения в этот файл.

См. Документацию длярамки, но я думаю, что это тот же процесс для автономных компонентов https://symfony.com/doc/current/validation/translations.html

0 голосов
/ 13 октября 2019

Полагаю, вам нужно попробовать базовый способ перевода текстов.

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' => $translator->trans('name.short'),
                ])
            ]

        // ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...