]> git.joonet.de Git - adminer.git/commitdiff
Properly detect Accept-Language
authorjakubvrana <jakubvrana@7c3ca157-0c34-0410-bff1-cbf682f78f5c>
Wed, 25 Jul 2007 11:19:40 +0000 (11:19 +0000)
committerjakubvrana <jakubvrana@7c3ca157-0c34-0410-bff1-cbf682f78f5c>
Wed, 25 Jul 2007 11:19:40 +0000 (11:19 +0000)
git-svn-id: https://adminer.svn.sourceforge.net/svnroot/adminer/trunk@244 7c3ca157-0c34-0410-bff1-cbf682f78f5c

lang.inc.php

index 88c00165d564c226f01958c2c71c844c46278a50..e5e36e2e301e9b60a2682b62ef0f6e5819da2fbe 100644 (file)
@@ -193,11 +193,22 @@ if (isset($_GET["lang"])) {
 if (strlen($_COOKIE["lang"])) {
        $LANG = $_COOKIE["lang"];
 } else {
-       $LANG = preg_replace('~[,;].*~', '', $_SERVER["HTTP_ACCEPT_LANGUAGE"]);
-       if (!isset($translations[$LANG])) { //! try next languages
-               $LANG = preg_replace('~-.*~', '', $LANG);
-               if (!isset($translations[$LANG])) {
-                       $LANG = "en";
+       $accept_language = array();
+       preg_match_all('~([-a-z]+)(;q=([0-9.]+))?~', $_SERVER["HTTP_ACCEPT_LANGUAGE"], $matches, PREG_SET_ORDER);
+       foreach ($matches as $match) {
+               $accept_language[$match[1]] = ($match[3] ? $match[3] : 1);
+       }
+       arsort($accept_language);
+       $LANG = "en";
+       foreach ($accept_language as $lang => $q) {
+               if (isset($translations[$lang])) {
+                       $LANG = $lang;
+                       break;
+               }
+               $lang = preg_replace('~-.*~', '', $LANG);
+               if (!isset($accept_language[$lang]) && isset($translations[$lang])) {
+                       $LANG = $lang;
+                       break;
                }
        }
 }