Why does Symfony ignore the browsers locale-setting (HTTP-Request Accept-Language Header)?

Senči picture Senči · Aug 27, 2012 · Viewed 12.3k times · Source

i am currently trying to enable the translator in Symfony 2.0. Symfony is ignoring the Accept-Language Header variable and is using default_locale (and when that is not defined the fallback).

My request looks like:

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

but $this->getRequest()->getLocale(); gets me en with that same request.

Can somebody tell me what may be wrong?

Yes, I have tried to clear the cache and deleting my cookies (omnomnom) :)

Answer

Carlos Granados picture Carlos Granados · Aug 27, 2012

This is the expected behaviour. Symfony does not by default use the Accept Language header and instead relies on the symfony configuration for locale settings. In fact, it is advised not to use the same URL for content in different locales, see this document:

Symfony 2 The Book - Translations - The Locale and the URL

But if you want to ignore this advice and use the Accept language header, you can do it with this code in your controller:

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

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