Почему Symfony игнорирует локализацию браузеров (HTTP-Request 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 с тем же запросом.

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

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

Ответы

Ответ 1

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

Symfony 2 The Book - Translations - The Locale и URL

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

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

$session->setLocale($request->getPreferredLanguage(array('de', 'en')));