相关疑难解决方法(0)

Symfony2语言环境检测:不考虑会话中的_locale

我正在尝试实现一个检测用户首选语言的LocaleListener(考虑Accept-Language标头)并将其存储在会话中以避免每次请求都检查它.我已经开发了以下代码来完成此任务:

public function onKernelRequest(GetResponseEvent $event) {
    $request = $event->getRequest();

    if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
        return;
    }

    $preferredLocale = $request->getPreferredLanguage($this->availableLocales);

    if ($this->container->has('session')) {
        $session = $this->container->get('session');
        if (!$session->has('_locale')) {
            $session->set('_locale', $preferredLocale);
        }
    } else {
        $request->setLocale($preferredLocale);
    }
}
Run Code Online (Sandbox Code Playgroud)

代码正在运行,首选语言存储在会话中,但symfony不考虑存储在会话中的语言环境来翻译字符串.在我的情况下,我的首选语言是'pt_BR',当我逃脱时:

{{ app.request.locale }}
Run Code Online (Sandbox Code Playgroud)

symfony正在逃避'en'.symfony不应该考虑存储在session('_ locale')中的值来定义请求语言环境吗?这是正确的行为吗?我怎么能做到这一点?

locale translation localization symfony

6
推荐指数
2
解决办法
1万
查看次数

标签 统计

locale ×1

localization ×1

symfony ×1

translation ×1