Обнаружение локали 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);
    }
}

Код работает, предпочтительный язык хранится в сеансе, но Symfony не учитывает локаль, сохраненную в сеансе, для перевода строк. В моем случае моим предпочтительным языком был 'pt_BR', и когда я убегал:

{{ app.request.locale }}

Symfony избегает «en». Разве Symfony не должен учитывать значение, хранящееся в сеансе ('_ locale'), чтобы определить локаль запроса? Это правильное поведение? Как я могу это сделать?

Ответы на вопрос(2)

Ваш ответ на вопрос