如何一步为宏录制器加上中文界面?PyMacroRecord 国际化的完整实践

📅 发布时间:2026/8/23 14:05:17
如何一步为宏录制器加上中文界面?PyMacroRecord 国际化的完整实践
如何一步为宏录制器加上中文界面PyMacroRecord 国际化的完整实践【免费下载链接】PyMacroRecordFree and Open Source Macro Recorder with a modern GUI using Python项目地址: https://gitcode.com/gh_mirrors/py/PyMacroRecord打开一款国外开源工具满屏英文你的第一反应往往是能不能换成中文PyMacroRecord 是一款免费开源的宏录制工具负责录制鼠标移动、点击和键盘输入并回放。本文拆解 PyMacroRecord 中文支持的完整实现——一个 Python GUI 应用如何低成本完成国际化。PyMacroRecord 中文支持翻译文件放在哪、怎么组织先把翻译当成一套可插拔的资源包每种语言一个 JSON 文件统一放在同一个目录里这就是整个方案的核心思路。所有语言文件都在 src/langs/ 目录下一种语言一个文件zh-CN.json、en.json、de.json、fr.json、es.json、it.json、pt-BR.json、ru-RU.json、tr.json、nl.json、bg.json等覆盖英语、中文简体、德语、法语、西班牙语、意大利语、葡萄牙语巴西、俄语、土耳其语、荷兰语、保加利亚语等 11 种语言这种一语言一文件的放法有三个好处代码和翻译彻底分离不会写代码的人也能参与翻译运行时按用户选择动态加载对应文件新增语言只丢一个 JSON 进去一行代码都不用改单个语言文件内部是分层结构顶层放元信息其余按功能模块组织文本。以 中文语言文件 为例information: { author: DennyClarkson, lang_short: zh-CN, lang_long: Chinese-Simplified }, content: { global: { confirm_button: 确认, ... } }information记录作者和语言标识短码 全称content则按模块切分全局按钮、文件菜单、选项菜单回放、设置、帮助菜单、其它菜单……每段界面文本都有固定地址。好处很直接换语言时整个文件可以原样替换代码侧不用改一个字符。如何让用户自己切换语言动态扫描目录生成下拉选项语言选择窗口由 src/windows/options/settings/select_language.py 实现。它最省心的地方在于下拉选项不是写死的而是打开窗口时现扫现建——for lang in os.listdir(resource_path(langs)): file_lang os.path.join(resource_path(langs), lang) with open(file_lang, encodingUTF-8) as f: content json.load(f) self.options[content[information][lang_long]] content[information][lang_short]流程翻译成大白话就是遍历langs目录里的所有文件逐个打开读出information里的语言信息下拉框显示全称如Chinese-Simplified背后取值用短码zh-CN这样语言列表就是文件列表的镜像目录里多一个文件下拉框里自动多一个选项删掉一个选项随之消失。维护成本基本为零。点击确认之后发生了什么语言切换的完整时间线用户在窗口里选定语言并点击确认后setNewLanguage按顺序做四件事def setNewLanguage(self, newLang, main_app): self.settings.change_settings(Language, None, None, self.options[newLang]) main_app.load_language() main_app.version.refresh_locale_text() # 旧菜单丢弃后整体重建 main_app.menu MenuBar(main_app)按时间线拆开看写配置把语言短码持久化到用户设置里程序重启后选择不会丢重载资源load_language()按配置读取对应 JSON装进main_app.text_content字典若某条翻译缺失会用en.json兜底补齐界面上不会出现键缺失刷新界面文本全界面文本统一从main_app.text_content这个字典里按路径取指向新字典后当前窗口内的标题、按钮、提示自动换成新语言重建菜单栏菜单栏是常驻控件逐条改文字容易漏不如销毁旧菜单、用新语言整体重建一份 MenuBar干净且稳定避坑指南编码、布局与资源路径三个坑 坑 1编码。中文乱码往往不是翻译错了而是读文件时没声明编码。项目里凡涉及语言文件的读写一律显式指定 UTF-8with open(file_lang, encodingUTF-8) as f: content json.load(f)坑 2布局。同样的意思中文和英文占用宽度不同——中文字少但单个字宽按钮用英文刚好放下的换成中文可能挤成一团。翻译时要盯住四点术语一致性同一专业术语全软件统一译法中文标点规范全角标点为主不要中英标点混用给按钮和标签预留宽度余量别按极限宽度设计长文本提示语在目标语言下重新看一眼换行效果坑 3资源路径。开发时相对路径能跑打包成可执行文件后工作目录往往不在语言文件旁边路径一断就全线崩溃。项目用 resource_path() 统一解决开发、PyInstaller、cx_Freeze 三种环境def resource_path(relative_path): Get absolute path to resource, works for dev, PyInstaller and cx_Freeze. if getattr(sys, frozen, False): base_path getattr(sys, _MEIPASS, path.dirname(sys.executable)) else: base_path path.abspath(.) return path.join(base_path, relative_path)如何把这套多语言方案复制到你自己的项目 想在自己的 Python GUI 项目里做同样的事抓住这五条就够了早期规划JSON 目录和文件格式在设计期就定下来别等界面全部做完再补国际化资源分离所有界面文案进语言文件代码里不许硬编码任何显示文本统一接口建一个text_content式的字典组件只认键名不认字符串换语言就是换字典测试覆盖每加一种语言把所有窗口和对话框走一遍确认翻译无缺漏——兜底机制只是保险不能替代完整翻译社区协作翻译是天然适合众包的贡献形式用开源社区组织校对和纠错比一个人扛省力得多写在最后最终效果一句话就能说清中文用户打开 PyMacroRecord 看到的是全中文界面而其他语言用户的体验完全不受影响——代价只是十几份 JSON 和一个小巧的语言选择窗口。如果把这套架构继续往前推下一步很自然接入机器翻译自动生成新语言的 JSON 骨架人工只做校对多语言支持的边际成本还能再砍一刀。【免费下载链接】PyMacroRecordFree and Open Source Macro Recorder with a modern GUI using Python项目地址: https://gitcode.com/gh_mirrors/py/PyMacroRecord创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考