From: Jo-Philipp Wich Date: Wed, 4 Dec 2019 18:00:27 +0000 (+0100) Subject: luci-base: dispatcher.lua: factor out language check into own function X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=a6b214f87332471b8210d05b02ae59ea6b0c16b7;p=project%2Fluci.git luci-base: dispatcher.lua: factor out language check into own function Signed-off-by: Jo-Philipp Wich --- diff --git a/modules/luci-base/luasrc/dispatcher.lua b/modules/luci-base/luasrc/dispatcher.lua index 4eb23b3e33..f150dcb428 100644 --- a/modules/luci-base/luasrc/dispatcher.lua +++ b/modules/luci-base/luasrc/dispatcher.lua @@ -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