|
今天发现一个奇怪的问题,luci在安装中文语言包后竟然无法切回英文,于是简单分析了一下代码,下面简单记录
1. luci的语言选择在/usr/lib/lua/luci/dispatcher.lua文件中实现,相关代码段如下
- 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
复制代码 简单分析以上代码,大致流程如下
. 获取已安装的语言包列表
. 获取浏览器支持的语言列表
. 将浏览器语言支持列表和已安装语言包进行比对, 按照优先级匹配,如果匹配上,就使用对应语言
. 如果浏览器支持的语言列表没有在语言包中匹配上,则使用默认语言(英文)
1. 问题解决
知道了语言匹配过程,解决问题就简单啦,将浏览器的中文语言支持移除,然后重启浏览器即可切换回英文界面
|
|