Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 19955c5

Browse files
committed
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
2 parents f2da7f1 + c928ddc commit 19955c5

File tree

2 files changed

+23
-15
lines changed

2 files changed

+23
-15
lines changed

src/Symfony/Component/HttpFoundation/Request.php

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1275,7 +1275,18 @@ public function getPreferredLanguage(array $locales = null)
12751275
return $locales[0];
12761276
}
12771277

1278-
$preferredLanguages = array_values(array_intersect($preferredLanguages, $locales));
1278+
$extendedPreferredLanguages = array();
1279+
foreach ($preferredLanguages as $language) {
1280+
$extendedPreferredLanguages[] = $language;
1281+
if (false !== $position = strpos($language, '_')) {
1282+
$superLanguage = substr($language, 0, $position);
1283+
if (!in_array($superLanguage, $preferredLanguages)) {
1284+
$extendedPreferredLanguages[] = $superLanguage;
1285+
}
1286+
}
1287+
}
1288+
1289+
$preferredLanguages = array_values(array_intersect($extendedPreferredLanguages, $locales));
12791290

12801291
return isset($preferredLanguages[0]) ? $preferredLanguages[0] : $locales[0];
12811292
}
@@ -1309,21 +1320,14 @@ public function getLanguages()
13091320
for ($i = 0, $max = count($codes); $i < $max; $i++) {
13101321
if ($i == 0) {
13111322
$lang = strtolower($codes[0]);
1312-
// First segment of compound language codes
1313-
// is added to supported languages list
1314-
if (!in_array($lang, $this->languages)) {
1315-
$this->languages[] = $lang;
1316-
}
13171323
} else {
13181324
$lang .= '_'.strtoupper($codes[$i]);
13191325
}
13201326
}
13211327
}
13221328
}
13231329

1324-
if (!in_array($lang, $this->languages)) {
1325-
$this->languages[] = $lang;
1326-
}
1330+
$this->languages[] = $lang;
13271331
}
13281332

13291333
return $this->languages;

src/Symfony/Component/HttpFoundation/Tests/RequestTest.php

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -881,6 +881,14 @@ public function testGetPreferredLanguage()
881881
$request = new Request();
882882
$request->headers->set('Accept-language', 'zh, en-us; q=0.8, en; q=0.6');
883883
$this->assertEquals('en', $request->getPreferredLanguage(array('fr', 'en')));
884+
885+
$request = new Request();
886+
$request->headers->set('Accept-language', 'zh, en-us; q=0.8');
887+
$this->assertEquals('en', $request->getPreferredLanguage(array('fr', 'en')));
888+
889+
$request = new Request();
890+
$request->headers->set('Accept-language', 'zh, en-us; q=0.8, fr-fr; q=0.6, fr; q=0.5');
891+
$this->assertEquals('en', $request->getPreferredLanguage(array('fr', 'en')));
884892
}
885893

886894
public function testIsXmlHttpRequest()
@@ -951,8 +959,8 @@ public function testGetLanguages()
951959

952960
$request = new Request();
953961
$request->headers->set('Accept-language', 'zh, en-us; q=0.8, en; q=0.6');
954-
$this->assertEquals(array('zh', 'en', 'en_US'), $request->getLanguages());
955-
$this->assertEquals(array('zh', 'en', 'en_US'), $request->getLanguages());
962+
$this->assertEquals(array('zh', 'en_US', 'en'), $request->getLanguages());
963+
$this->assertEquals(array('zh', 'en_US', 'en'), $request->getLanguages());
956964

957965
$request = new Request();
958966
$request->headers->set('Accept-language', 'zh, en-us; q=0.6, en; q=0.8');
@@ -969,10 +977,6 @@ public function testGetLanguages()
969977
$request = new Request();
970978
$request->headers->set('Accept-language', 'zh, i-cherokee; q=0.6');
971979
$this->assertEquals(array('zh', 'cherokee'), $request->getLanguages());
972-
973-
$request = new Request();
974-
$request->headers->set('Accept-language', 'en-us');
975-
$this->assertEquals(array('en', 'en_US'), $request->getLanguages());
976980
}
977981

978982
public function testGetRequestFormat()

0 commit comments

Comments
 (0)