merged branch jfsimon/issue-7378 (PR #7438)
This PR was merged into the 2.1 branch. Commits -------c928ddc
[HttpFoudantion] fixed Request::getPreferredLanguage()839c78a
Revert "merged branch jfsimon/issue-6928 (PR #7378)" Discussion ---------- [HttpFoundation] fixed Request::getPreferredLanguage() Previous PR #7378 was wrong and adding BC break. Resolution for short languages codes is now done in `Request::getPreferredLanguage()` method. | Q | A | ------------- | --- | Bug fix? | yes | New feature? | no | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | #7378
This commit is contained in:
commit
19955c5a3c
@ -1275,7 +1275,18 @@ class Request
|
||||
return $locales[0];
|
||||
}
|
||||
|
||||
$preferredLanguages = array_values(array_intersect($preferredLanguages, $locales));
|
||||
$extendedPreferredLanguages = array();
|
||||
foreach ($preferredLanguages as $language) {
|
||||
$extendedPreferredLanguages[] = $language;
|
||||
if (false !== $position = strpos($language, '_')) {
|
||||
$superLanguage = substr($language, 0, $position);
|
||||
if (!in_array($superLanguage, $preferredLanguages)) {
|
||||
$extendedPreferredLanguages[] = $superLanguage;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$preferredLanguages = array_values(array_intersect($extendedPreferredLanguages, $locales));
|
||||
|
||||
return isset($preferredLanguages[0]) ? $preferredLanguages[0] : $locales[0];
|
||||
}
|
||||
@ -1309,11 +1320,6 @@ class Request
|
||||
for ($i = 0, $max = count($codes); $i < $max; $i++) {
|
||||
if ($i == 0) {
|
||||
$lang = strtolower($codes[0]);
|
||||
// First segment of compound language codes
|
||||
// is added to supported languages list
|
||||
if (!in_array($lang, $this->languages)) {
|
||||
$this->languages[] = $lang;
|
||||
}
|
||||
} else {
|
||||
$lang .= '_'.strtoupper($codes[$i]);
|
||||
}
|
||||
@ -1321,10 +1327,8 @@ class Request
|
||||
}
|
||||
}
|
||||
|
||||
if (!in_array($lang, $this->languages)) {
|
||||
$this->languages[] = $lang;
|
||||
}
|
||||
}
|
||||
|
||||
return $this->languages;
|
||||
}
|
||||
|
@ -881,6 +881,14 @@ class RequestTest extends \PHPUnit_Framework_TestCase
|
||||
$request = new Request();
|
||||
$request->headers->set('Accept-language', 'zh, en-us; q=0.8, en; q=0.6');
|
||||
$this->assertEquals('en', $request->getPreferredLanguage(array('fr', 'en')));
|
||||
|
||||
$request = new Request();
|
||||
$request->headers->set('Accept-language', 'zh, en-us; q=0.8');
|
||||
$this->assertEquals('en', $request->getPreferredLanguage(array('fr', 'en')));
|
||||
|
||||
$request = new Request();
|
||||
$request->headers->set('Accept-language', 'zh, en-us; q=0.8, fr-fr; q=0.6, fr; q=0.5');
|
||||
$this->assertEquals('en', $request->getPreferredLanguage(array('fr', 'en')));
|
||||
}
|
||||
|
||||
public function testIsXmlHttpRequest()
|
||||
@ -951,8 +959,8 @@ class RequestTest extends \PHPUnit_Framework_TestCase
|
||||
|
||||
$request = new Request();
|
||||
$request->headers->set('Accept-language', 'zh, en-us; q=0.8, en; q=0.6');
|
||||
$this->assertEquals(array('zh', 'en', 'en_US'), $request->getLanguages());
|
||||
$this->assertEquals(array('zh', 'en', 'en_US'), $request->getLanguages());
|
||||
$this->assertEquals(array('zh', 'en_US', 'en'), $request->getLanguages());
|
||||
$this->assertEquals(array('zh', 'en_US', 'en'), $request->getLanguages());
|
||||
|
||||
$request = new Request();
|
||||
$request->headers->set('Accept-language', 'zh, en-us; q=0.6, en; q=0.8');
|
||||
@ -969,10 +977,6 @@ class RequestTest extends \PHPUnit_Framework_TestCase
|
||||
$request = new Request();
|
||||
$request->headers->set('Accept-language', 'zh, i-cherokee; q=0.6');
|
||||
$this->assertEquals(array('zh', 'cherokee'), $request->getLanguages());
|
||||
|
||||
$request = new Request();
|
||||
$request->headers->set('Accept-language', 'en-us');
|
||||
$this->assertEquals(array('en', 'en_US'), $request->getLanguages());
|
||||
}
|
||||
|
||||
public function testGetRequestFormat()
|
||||
|
Reference in New Issue
Block a user