Обнаружение локали 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'), чтобы определить локаль запроса? Это правильное поведение? Как я могу это сделать?