Procházet zdrojové kódy

fix: preserve equal language preference order

Jose Tejera před 3 měsíci
rodič
revize
10fab041fb
2 změnil soubory, kde provedl 14 přidání a 6 odebrání
  1. 6 6
      lib/I18n.php
  2. 8 0
      tst/I18nTest.php

+ 6 - 6
lib/I18n.php

@@ -409,12 +409,12 @@ class I18n
             if ($acceptedQuality === 0.0) {
             if ($acceptedQuality === 0.0) {
                 continue;
                 continue;
             }
             }
-            foreach ($availableLanguages as $availableValue) {
-                $availableQuality = 1.0;
-                foreach ($acceptedValues as $acceptedValue) {
-                    if ($acceptedValue === '*') {
-                        $any = true;
-                    }
+            foreach ($acceptedValues as $acceptedValue) {
+                if ($acceptedValue === '*') {
+                    $any = true;
+                }
+                foreach ($availableLanguages as $availableValue) {
+                    $availableQuality = 1.0;
                     $matchingGrade = self::_matchLanguage($acceptedValue, $availableValue);
                     $matchingGrade = self::_matchLanguage($acceptedValue, $availableValue);
                     if ($matchingGrade > 0) {
                     if ($matchingGrade > 0) {
                         $q = (string) ($acceptedQuality * $availableQuality * $matchingGrade);
                         $q = (string) ($acceptedQuality * $availableQuality * $matchingGrade);

+ 8 - 0
tst/I18nTest.php

@@ -80,6 +80,14 @@ class I18nTest extends TestCase
         $this->assertEquals('2 heures', I18n::_('%d hours', 2), '2 hours in French');
         $this->assertEquals('2 heures', I18n::_('%d hours', 2), '2 hours in French');
     }
     }
 
 
+    public function testEqualQualityPreservesBrowserOrder()
+    {
+        $_SERVER['HTTP_ACCEPT_LANGUAGE'] = 'fr;q=0.8,de;q=0.8';
+        I18n::loadTranslations();
+
+        $this->assertEquals('fr', I18n::getLanguage());
+    }
+
     public function testBrowserLanguageNoDetection()
     public function testBrowserLanguageNoDetection()
     {
     {
         $_SERVER['HTTP_ACCEPT_LANGUAGE'] = 'no;q=0.8,en-GB;q=0.6,en-US;q=0.4,en;q=0.2';
         $_SERVER['HTTP_ACCEPT_LANGUAGE'] = 'no;q=0.8,en-GB;q=0.6,en-US;q=0.4,en;q=0.2';