很多时候,程序需要根据当前系统语言,显示不同的语言资源。这里,我用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系统显示语言