luci-base: dispatcher.lua: factor out language check into own function
authorJo-Philipp Wich <jo@mein.io>
Wed, 4 Dec 2019 18:00:27 +0000 (19:00 +0100)
committerJo-Philipp Wich <jo@mein.io>
Thu, 7 May 2020 17:40:49 +0000 (19:40 +0200)
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit a6b214f87332471b8210d05b02ae59ea6b0c16b7)

modules/luci-base/luasrc/dispatcher.lua

index d7b722a07c97853dd5cd157f8c722cfc433bee9e..53014fc149c15d8901978fd91ef57db8be45ef6d 100644 (file)
@@ -503,6 +503,38 @@ function error500(message)
        return false
 end
 
+local function determine_request_language()
+       local conf = require "luci.config"
+       assert(conf.main, "/etc/config/luci seems to be corrupt, unable to find section 'main'")
+
+       local lang = conf.main.lang or "auto"
+       if lang == "auto" then
+               local aclang = http.getenv("HTTP_ACCEPT_LANGUAGE") or ""
+               for aclang in aclang:gmatch("[%w_-]+") do
+                       local country, culture = aclang:match("^([a-z][a-z])[_-]([a-zA-Z][a-zA-Z])$")
+                       if country and culture then
+                               local cc = "%s_%s" %{ country, culture:lower() }
+                               if conf.languages[cc] then
+                                       lang = cc
+                                       break
+                               elseif conf.languages[country] then
+                                       lang = country
+                                       break
+                               end
+                       elseif conf.languages[aclang] then
+                               lang = aclang
+                               break
+                       end
+               end
+       end
+
+       if lang == "auto" then
+               lang = i18n.default
+       end
+
+       i18n.setlanguage(lang)
+end
+
 function httpdispatch(request, prefix)
        http.context.request = request
 
@@ -522,6 +554,8 @@ function httpdispatch(request, prefix)
                r[#r+1] = node
        end
 
+       determine_request_language()
+
        local stat, err = util.coxpcall(function()
                dispatch(context.request)
        end, error500)
@@ -639,36 +673,6 @@ function dispatch(request)
        local ctx = context
        ctx.path = request
 
-       local conf = require "luci.config"
-       assert(conf.main,
-               "/etc/config/luci seems to be corrupt, unable to find section 'main'")
-
-       local i18n = require "luci.i18n"
-       local lang = conf.main.lang or "auto"
-       if lang == "auto" then
-               local aclang = http.getenv("HTTP_ACCEPT_LANGUAGE") or ""
-               for aclang in aclang:gmatch("[%w_-]+") do
-                       local country, culture = aclang:match("^([a-z][a-z])[_-]([a-zA-Z][a-zA-Z])$")
-                       if country and culture then
-                               local cc = "%s_%s" %{ country, culture:lower() }
-                               if conf.languages[cc] then
-                                       lang = cc
-                                       break
-                               elseif conf.languages[country] then
-                                       lang = country
-                                       break
-                               end
-                       elseif conf.languages[aclang] then
-                               lang = aclang
-                               break
-                       end
-               end
-       end
-       if lang == "auto" then
-               lang = i18n.default
-       end
-       i18n.setlanguage(lang)
-
        local c = ctx.tree
        local stat
        if not c then