浏览代码

Make language detection more robust

Bubka 2 年之前
父节点
当前提交
3e391167c6
共有 1 个文件被更改,包括 16 次插入3 次删除
  1. 16 3
      app/Http/Middleware/SetLanguage.php

+ 16 - 3
app/Http/Middleware/SetLanguage.php

@@ -28,10 +28,23 @@ class SetLanguage
 
         if($lang === 'browser') {
             $lang = config('app.fallback_locale');
-            
-            if ($request->hasHeader("Accept-Language")) {
+            $accepted = $request->header("Accept-Language");
+
+            if ($accepted) {
+                $accepted = is_array($accepted) ? implode(',', $accepted) : $accepted;
+                $prefLocales = array_reduce(
+                    explode(',', $accepted),
+                    function ($res, $el) { 
+                        list($l, $q) = array_merge(explode(';q=', $el), [1]); 
+                        $res[$l] = (float) $q; 
+                        return $res;
+                    },
+                    []
+                );
+                arsort($prefLocales);
+
                 // We only keep the primary language passed via the header.
-                $lang = head(explode(',', $request->header("Accept-Language")));
+                $lang = array_key_first($prefLocales);
             }
         }