luci-base: improve language detection
Properly deal with client accept languages containing a culture identifier such as "zh-CN" or "pt-BR". Fixes #1226. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This commit is contained in:
parent
f03bee5a91
commit
15cb504b44
1 changed files with 13 additions and 4 deletions
|
@ -219,10 +219,19 @@ function dispatch(request)
|
|||
local lang = conf.main.lang or "auto"
|
||||
if lang == "auto" then
|
||||
local aclang = http.getenv("HTTP_ACCEPT_LANGUAGE") or ""
|
||||
for lpat in aclang:gmatch("[%w-]+") do
|
||||
lpat = lpat and lpat:gsub("-", "_")
|
||||
if conf.languages[lpat] then
|
||||
lang = lpat
|
||||
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
|
||||
|
|
Loading…
Reference in a new issue