萝卜大侠 发表于 2022-7-30 16:38:53

Luci的自动语言选择机制

今天发现一个奇怪的问题,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("^()()$")
                        if country and culture then
                              local cc = "%s_%s" %{ country, culture:lower() }
                              if conf.languages then
                                        lang = cc            
                                        break
                              elseif conf.languages then
                                        lang = country
                                        break
                              end
                        elseif conf.languages then
                              lang = aclang
                              break
                        end                           
                end                        
      end
                                    
      if lang == "auto" then            
                lang = i18n.default
      end                                    
                                                   
      i18n.setlanguage(lang)            
end简单分析以上代码,大致流程如下
. 获取已安装的语言包列表
. 获取浏览器支持的语言列表
. 将浏览器语言支持列表和已安装语言包进行比对, 按照优先级匹配,如果匹配上,就使用对应语言
. 如果浏览器支持的语言列表没有在语言包中匹配上,则使用默认语言(英文)

1. 问题解决
知道了语言匹配过程,解决问题就简单啦,将浏览器的中文语言支持移除,然后重启浏览器即可切换回英文界面

这是饭店 发表于 2022-8-29 22:14:08

改英文难度不需要单独安语言包?

萝卜大侠 发表于 2022-8-29 23:28:08

这是饭店 发表于 2022-8-29 22:14
改英文难度不需要单独安语言包?

英文是默认语言,所以不需要单独安装,当然,你单独安装也可以

这是饭店 发表于 2022-8-30 10:02:59

萝卜大侠 发表于 2022-8-29 23:28
英文是默认语言,所以不需要单独安装,当然,你单独安装也可以

英文写的代码不显示英文还能显示中文吗
页: [1]
查看完整版本: Luci的自动语言选择机制