forum.gl-inet.cn

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
    查看: 2267|回复: 3

    Luci的自动语言选择机制

    [复制链接]

    76

    主题

    2144

    帖子

    9846

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    9846

    官方人员

    发表于 2022-7-30 16:38:53 | 显示全部楼层 |阅读模式
    今天发现一个奇怪的问题,luci在安装中文语言包后竟然无法切回英文,于是简单分析了一下代码,下面简单记录

    1. luci的语言选择在/usr/lib/lua/luci/dispatcher.lua文件中实现,相关代码段如下
    1. local function determine_request_language()                             
    2.         local conf = require "luci.config"   
    3.         assert(conf.main, "/etc/config/luci seems to be corrupt, unable to find section 'main'")
    4.                            
    5.         local lang = conf.main.lang or "auto"
    6.         if lang == "auto" then              
    7.                 local aclang = http.getenv("HTTP_ACCEPT_LANGUAGE") or ""
    8.                 for aclang in aclang:gmatch("[%w_-]+") do
    9.                         local country, culture = aclang:match("^([a-z][a-z])[_-]([a-zA-Z][a-zA-Z])$")
    10.                         if country and culture then
    11.                                 local cc = "%s_%s" %{ country, culture:lower() }
    12.                                 if conf.languages[cc] then
    13.                                         lang = cc            
    14.                                         break
    15.                                 elseif conf.languages[country] then
    16.                                         lang = country
    17.                                         break
    18.                                 end
    19.                         elseif conf.languages[aclang] then
    20.                                 lang = aclang
    21.                                 break
    22.                         end                           
    23.                 end                        
    24.         end
    25.                                       
    26.         if lang == "auto" then            
    27.                 lang = i18n.default
    28.         end                                    
    29.                                                    
    30.         i18n.setlanguage(lang)            
    31. end
    复制代码
    简单分析以上代码,大致流程如下
    . 获取已安装的语言包列表
    . 获取浏览器支持的语言列表
    . 将浏览器语言支持列表和已安装语言包进行比对, 按照优先级匹配,如果匹配上,就使用对应语言
    . 如果浏览器支持的语言列表没有在语言包中匹配上,则使用默认语言(英文)

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

    回复

    使用道具 举报

    12

    主题

    232

    帖子

    1228

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    1228
    发表于 2022-8-29 22:14:08 | 显示全部楼层
    改英文难度不需要单独安语言包?
    回复

    使用道具 举报

    76

    主题

    2144

    帖子

    9846

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    9846

    官方人员

     楼主| 发表于 2022-8-29 23:28:08 | 显示全部楼层
    这是饭店 发表于 2022-8-29 22:14
    改英文难度不需要单独安语言包?

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

    使用道具 举报

    12

    主题

    232

    帖子

    1228

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    1228
    发表于 2022-8-30 10:02:59 | 显示全部楼层
    萝卜大侠 发表于 2022-8-29 23:28
    英文是默认语言,所以不需要单独安装,当然,你单独安装也可以

    英文写的代码不显示英文还能显示中文吗
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|gl-inet.cn ( 粤ICP备18130956号 )

    GMT+8, 2024-11-21 21:19 , Processed in 0.028922 second(s), 25 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表