Symfony 4.3 + ApiPlatform +接受语言

问题描述 投票:0回答:1

我刚开始使用Api平台,在翻译验证程序的消息时遇到问题。

我有:

...创建了两个带有翻译的文件:/translations/validators.en.yaml和/translations/validators.fr.yaml

...添加了适当的自定义验证器消息

...将default_locale设置为en

...在实体中添加了翻译验证器定义:

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

此后,正确返回了我的自定义翻译消息。

现在,我要依赖于Accept-Language标头而不是default_locale启用翻译。

我知道symfony不会在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',
        ];
    }
}

不幸的是这种方式行不通。即使我直接将'fr'作为参数作为setLocale和setDefaultLocale的参数,翻译仍然在kernel.default_locale上进行。

有人知道如何解决我的问题吗?

php symfony api-platform.com
1个回答
0
投票

查看此Symfony文档页面:https://symfony.com/doc/current/session/locale_sticky_session.html

我认为您的侦听器应具有更高的优先级(例如20),因此它在本地侦听器之前被加载。

© www.soinside.com 2019 - 2024. All rights reserved.