/**
* Chooses a language for a request
*
* @return $response or null
**/
public function switchLocaleForRequest(Request $request)
{
$session = $request->getSession();
$parts = explode('.', $request->getHost());
if (count($parts) === 3) {
$locale = $parts[0];
if ($locale == $session->getLocale()) {
return;
}
if ($this->manager->isAvailable($locale)) {
$session->setLocale($locale);
$preferred = $request->getPreferredLanguage($this->manager->getAvailableLanguageCodes());
if ($preferred != $locale) {
$session->setFlash('locale_change_adjust', $preferred);
} else {
$session->setFlash('locale_change_contribute', $locale);
}
return;
}
$host = $parts[1] . '.' . $parts[2];
} else {
$host = $parts[0] . '.' . $parts[1];
}
$locale = $request->getPreferredLanguage($this->manager->getAvailableLanguageCodes());
$url = sprintf('http://%s.%s%s', $locale, $host, $request->getRequestUri());
$response = new RedirectResponse($url);
$preferredLanguage = $this->getRequestPreferredLanguage($request);
if ($preferredLanguage && $locale != $preferredLanguage) {
$allLanguageCodes = array_keys($this->manager->getLanguages());
if (in_array($preferredLanguage, $allLanguageCodes)) {
$session->setFlash('locale_missing', $preferredLanguage);
}
}
return $response;
}