Почему Symfony игнорирует настройку локали браузера (HTTP-запрос Accept-Language Header)?

В настоящее время я пытаюсь включить переводчик в Symfony 2.0. Symfony игнорирует переменную заголовка Accept-Language и использует default_locale (и когда это не определено как запасной вариант).

Мой запрос выглядит так:

Accept-Language de-DE,de;q=0.8,en-us;q=0.5,en;q=0.3

но $this->getRequest()->getLocale(); получает меня en с тем же запросом.

Может кто-нибудь сказать мне, что может быть не так?

Да, я попытался очистить кеш и удалить мои куки (омномном):)

1 ответ

Решение

Это ожидаемое поведение. Symfony по умолчанию не использует заголовок Accept Language и вместо этого полагается на конфигурацию Symfony для настроек локали. На самом деле, рекомендуется не использовать один и тот же URL для контента в разных локалях, см. Этот документ:

Symfony 2 The Book - Переводы - Локаль и URL

Но если вы хотите игнорировать этот совет и использовать заголовок языка Accept, вы можете сделать это с помощью этого кода в вашем контроллере:

$request = $this->getRequest();
$session = $this->get('session');

$session->setLocale($request->getPreferredLanguage(array('de', 'en')));
Другие вопросы по тегам