[Tkinter 101] 07 Python运行时检查系统显示语言,支持多语言

很多时候,程序需要根据当前系统语言,显示不同的语言资源。这里,我用ini作为资源文件,不同语言资源文件保存在不同的目录下。使用configparser模块解析ini。创建LocHelper类实现输入resource id读取字符串的功能。

 文件目录结构:

窗口标题,显示不同语言效果:

 main.py使用LocHelper设置窗口标题,代码:

locHelper = LocHelper("main")
root = tk.Tk()
root.title(locHelper.get_string("TITLE"))

 LocHelper.py,检查系统当前显示语言,程序就可以加载某一个具体的ini文件。代码:

        name = "en"
        windll = ctypes.windll.kernel32
        lang = locale.windows_locale[windll.GetUserDefaultUILanguage()]
        match lang:
            case "zh_CN":
                name = "zh-cn"
            case "en_US":
                name = "en"

LocHelper.py,解析ini文件,读取资源。代码:

conf = configparser.ConfigParser()
conf.read(os.path.join(os.getcwd(), LOC_DIR_NAME, name, CONF_FILE_NAME), encoding="utf-8")
conf.get(section, resourceid)
 LocHelper.py,完整代码:
import os
import configparser
import ctypes
import locale

LOC_DIR_NAME = "localization"
CONF_FILE_NAME = "resource.ini"


class LocHelper:
    def __init__(self, section="main"):
        name = "en"
        windll = ctypes.windll.kernel32
        lang = locale.windows_locale[windll.GetUserDefaultUILanguage()]
        match lang:
            case "zh_CN":
                name = "zh-cn"
            case "en_US":
                name = "en"
        self.conf = configparser.ConfigParser()
        self.conf.read(os.path.join(os.getcwd(), LOC_DIR_NAME, name, CONF_FILE_NAME),
                       encoding="utf-8")
        self.section = section

    def get_string(self, resourceid):
        return self.conf.get(self.section, resourceid)

Settings里可以修改Windows系统显示语言 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值