Я только начал работать с платформой 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' напрямую.
Кто-нибудь знает, как решить мою проблему?