Symfony 4.3 + ApiPlatform + Accept-Language - PullRequest
0 голосов
/ 10 июля 2019

Я только начал работать с платформой Api, и у меня проблема с переводом сообщений валидатора.

Я:

... создал два файла с переводами: /translations/validators.en.yaml и /translations/validators.fr.yaml

...добавлено соответствующее настраиваемое сообщение валидатора

... установить default_locale как en

... добавлено определение валидатора перевода в Entity:

/**
 * @ORM\Column(type="text", nullable=true)
 * @Assert\NotBlank(message="test.message")
 */
private $title;

После этого мое собственно переведенное сообщение возвращается корректно.

Теперь я хочу включить перевод, используя заголовок Accept-Language вместо default_locale.

Я знаю, что Symfony не ретранслирует заголовок Accept-Language,Вместо этого я создал подписчика, который отвечает за определение предпочтительного языка (из Accept-Language):


namespace App\EventSubscriber;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;

class LocaleSubscriber implements EventSubscriberInterface
{
    public function onKernelRequest(GetResponseEvent $event)
    {
        $request = $event->getRequest();
        $locale = substr($request->getPreferredLanguage(), 0, 2);

        $request->setDefaultLocale($locale);
        $request->setLocale($locale);
    }

    public static function getSubscribedEvents()
    {
        return [
           'kernel.request' => 'onKernelRequest',
        ];
    }
}

К сожалению, этот способ не работает.Перевод по-прежнему включается kernel.default_locale, даже если я в качестве параметра для setLocale и setDefaultLocale указываю 'fr' напрямую.

Кто-нибудь знает, как решить мою проблему?

...