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

Skip to content

Commit c928ddc

Browse files
committed
[HttpFoudantion] fixed Request::getPreferredLanguage()
1 parent 839c78a commit c928ddc

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

src/Symfony/Component/HttpFoundation/Request.php

Lines changed: 12 additions & 1 deletion
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
}

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

Lines changed: 8 additions & 0 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()

0 commit comments

Comments
 (0)