尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

grepWin多语言机制一文读懂

grepWin多语言机制一文读懂 grepWin多语言机制一文读懂【免费下载链接】grepWinA powerful and fast search tool using regular expressions项目地址: https://gitcode.com/gh_mirrors/gr/grepWingrepWin 是 Windows 上的正则搜索工具它的国际化把全部译文放进独立的 .lang 文件切换语言后界面即时重绘、无需重启。看懂这套做法你自己的 C 桌面应用也能照搬。为什么一个搜索工具要支持多语言桌面工具一旦分发给不同地区界面语言就成了使用门槛同事拿到安装包后看到满屏英文标签连搜索包含的文件名在哪都找不到。对维护者来说痛点同样明显如果界面文字硬编码在 C 源文件里每加一种语言都要改代码、重新编译翻译人员也完全无法参与。grepWin 的解法就是把 UI 文本从二进制里彻底剥离出来换成可独立维护的语言资源。架构速览资源、引擎、切换三层分离整套国际化分三层语言资源层是 translations/ 目录下的一批.lang文件翻译引擎层是CLanguage单例由 sktoolslib 依赖库实现负责把英文原文 → 目标语言的映射读入内存应用层则是每个对话框在创建后自行调用翻译接口完成重绘。三层之间只通过接口交互所以换语言这件事被压缩成两步加载新文件、重绘现有窗口。关键机制拆解语言文件如何组织每种语言一个文件translations/ 目录里每种语言对应一个.lang文件当前共 28 种。文件格式采用 gettext 体系的 msgid/msgstr 键值对msgid 是英文原文msgstr 是译文。这种格式带来两个好处文件可直接被 gettext 生态的工具链处理运行时扫描安装目录即可枚举全部可用语言下拉列表因此能自动列出所有.lang文件新增语言不需要改任何注册代码。翻译如何生效从单条字符串到整窗批量翻译接口分三个粒度。最细的是TranslatedString按资源 ID 取单条译文适合右键菜单项、工具提示这类动态拼装的文本::InsertMenu(m_menu, 1, MF_BYPOSITION | MF_STRING, 1, TranslatedString(g_hInst, IDS_OPENCONTAININGFOLDER).c_str());其次是TranslateMenu整条弹出菜单批量翻译最粗的是TranslateWindow遍历一个窗口的全部控件按 ID 匹配译文。每个对话框搜索主窗、设置、书签、正则测试等在构造完成后都只做一件事CLanguage::Instance().TranslateWindow(*this);运行时如何切换加载、持久化、重绘在设置对话框选择新语言并确定后流程是这样的所选.lang文件的路径先被写入持久化位置——便携模式存 ini 文件安装模式写注册表随后LoadFile解析新文件替换CLanguage内存中的映射表紧接着对主窗口调一次TranslateWindow所有控件文字就地刷新。启动时走的是同一条链路的逆查程序从 ini 或注册表读出上次保存的语言文件路径再执行同样的加载与翻译。整个过程不重启、不重建窗口切换是秒生效的。实操三步给项目新增一种语言复制translations/English.lang为模板重命名为目标语言如Norwegian.lang保持所有 msgid 原文不动。逐条翻译 msgstr 字段文件保持 UTF-8 编码保存。放入 translations/ 目录后重启 grepWin语言下拉列表会自动识别新文件若要发布安装包还需在 Setup.wxs 的打包清单中补上该文件。设计启示文本与代码走两条通道。界面文字只存在于 .lang 文件里代码通过资源 ID 间接引用译者不需要读一行 C 就能贡献新语言。翻译接口按粒度分层。单条、菜单、整窗各有一个入口调用点按场景取用最合适的粒度避免每个界面手写遍历逻辑。切换路径足够短。映射表常驻内存重绘只需一次TranslateWindow调用免重启切换语言不是设计目标而是架构短带来的自然结果。想验证这套机制可以直接翻一翻 translations/ 目录里任意两个.lang文件对比 msgid 与 msgstr 的对应关系——你会发现 28 种语言共用的是同一份键集。【免费下载链接】grepWinA powerful and fast search tool using regular expressions项目地址: https://gitcode.com/gh_mirrors/gr/grepWin创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表