From 839c78a4b0d47aa078698e6c8093cb6303028d60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Simon?= Date: Wed, 20 Mar 2013 14:19:35 +0100 Subject: [PATCH 1/2] Revert "merged branch jfsimon/issue-6928 (PR #7378)" This reverts commit 70ec4f6c61a12000498790e70ca70a393ee03420, reversing changes made to 3a03f3e346b12f330b6c1582d2f6d3bc7108d933. --- src/Symfony/Component/HttpFoundation/Request.php | 9 +-------- .../Component/HttpFoundation/Tests/RequestTest.php | 8 ++------ 2 files changed, 3 insertions(+), 14 deletions(-) diff --git a/src/Symfony/Component/HttpFoundation/Request.php b/src/Symfony/Component/HttpFoundation/Request.php index bc5dfa17c1ae1..ca3f465003bf0 100644 --- a/src/Symfony/Component/HttpFoundation/Request.php +++ b/src/Symfony/Component/HttpFoundation/Request.php @@ -1309,11 +1309,6 @@ public function getLanguages() 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,9 +1316,7 @@ public function getLanguages() } } - if (!in_array($lang, $this->languages)) { - $this->languages[] = $lang; - } + $this->languages[] = $lang; } return $this->languages; diff --git a/src/Symfony/Component/HttpFoundation/Tests/RequestTest.php b/src/Symfony/Component/HttpFoundation/Tests/RequestTest.php index b4a43fc1f2e25..535ebfc9a3cf6 100644 --- a/src/Symfony/Component/HttpFoundation/Tests/RequestTest.php +++ b/src/Symfony/Component/HttpFoundation/Tests/RequestTest.php @@ -951,8 +951,8 @@ public function testGetLanguages() $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 +969,6 @@ public function testGetLanguages() $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() From c928ddc77dade3a67330a8c18f8b73692eb8085f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Simon?= Date: Wed, 20 Mar 2013 15:10:59 +0100 Subject: [PATCH 2/2] [HttpFoudantion] fixed Request::getPreferredLanguage() --- src/Symfony/Component/HttpFoundation/Request.php | 13 ++++++++++++- .../Component/HttpFoundation/Tests/RequestTest.php | 8 ++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/HttpFoundation/Request.php b/src/Symfony/Component/HttpFoundation/Request.php index ca3f465003bf0..6da6bc87edd9f 100644 --- a/src/Symfony/Component/HttpFoundation/Request.php +++ b/src/Symfony/Component/HttpFoundation/Request.php @@ -1275,7 +1275,18 @@ public function getPreferredLanguage(array $locales = null) 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]; } diff --git a/src/Symfony/Component/HttpFoundation/Tests/RequestTest.php b/src/Symfony/Component/HttpFoundation/Tests/RequestTest.php index 535ebfc9a3cf6..38ae748da6a9f 100644 --- a/src/Symfony/Component/HttpFoundation/Tests/RequestTest.php +++ b/src/Symfony/Component/HttpFoundation/Tests/RequestTest.php @@ -881,6 +881,14 @@ public function testGetPreferredLanguage() $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()