grepWin多语言支持揭秘:28种语言,背后只有1个单例类

📅 2026/8/21 21:30:37
grepWin多语言支持揭秘:28种语言,背后只有1个单例类
grepWin多语言支持揭秘28种语言背后只有1个单例类【免费下载链接】grepWinA powerful and fast search tool using regular expressions项目地址: https://gitcode.com/gh_mirrors/gr/grepWingrepWin是一个用正则表达式在成千上万个文件里秒级定位内容的搜索工具。但更有意思的问题是同一个“替换”按钮凭什么在你眼里是 Replace在德语同事眼里变成 Ersetzen这篇文章把国际化、本地化的多语言支持链路完整拆开给你看。多语言支持架构速览谁管什么 先花30秒看全局。整个项目的国际化挂在CLanguage这一个单例类上28个语言包只是 translations/ 目录下的纯文本 .lang 文件业务代码只通过“窗口、菜单、单字符串”三类接口跟它打交道。CLanguage 单例唯一入口 ├── TranslateWindow() 批量翻译整个窗口的控件 ├── TranslateMenu() 翻译整条菜单 └── TranslatedString() 按需翻译单个字符串 ↑ LoadFile() ← translations/28个 .lang 文件分工很清楚CLanguage 管加载和查表.lang 文件管逐词映射三个接口管三种粒度。想深挖的话看这里translations/。从启动到渲染语言文件如何被加载并生效 ⚡故事按事件顺序讲。启动时程序不会去猜语言在哪而是去固定位置找便携版读 ini安装版读注册表然后把路径交给单例——// 启动时确定语言文件路径便携版读ini安装版读注册表再加载 CLanguage::Instance().LoadFile(bPortable ? g_iniFile.GetValue(Lglobal, Llanguagefile, L) : std::wstring(CRegStdString(LSoftware\grepWin\languagefile)));.lang 文件本身是一张 msgid/msgstr 映射表键就是英文原文——这就是“动译文、不动源码”成立的原因。窗口构建时每个对话框把控件组装完会喊一声 TranslateWindow单例就遍历子控件逐个到映射表里查对应译文// 对话框构造时把窗口内所有控件批量翻译 CLanguage::Instance().TranslateWindow(*this);运行中冒出来的字符串比如菜单项、工具提示这种没法一次批量覆盖的就走点译——// 点译单个资源字符串 std::wstring sTitle TranslatedString(hResource, IDS_SELECTEDITOR);还有一处容易漏你在设置里切换语言本质只是再走一遍 LoadFile TranslateWindow逻辑在 src/Settings.cpp界面立刻翻新不用重启。启动完整流程见 src/grepWin.cpp。你一定会撞见本地化的三个场景 ️主搜索界面——你每次打开软件看到的那个窗口界面上每个标签、按钮、提示都是一次 TranslateWindow 的产物搜索模式区、文件过滤区、状态栏全都来自这里。右键菜单——在搜索结果上点右键打开所在文件夹这类条目是靠 TranslatedString 逐条插进菜单的你当前什么语言它就跟着变实现在 src/ShellContextMenu.cpp。安装界面——本地化比你想的开始得更早装软件时看到的界面同样是译好的设置面板也一样连动态生成的工具提示都要先翻译再显示想深挖的话看 src/Settings.cpp。三步加入你的语言 ✍️贡献成本被刻意压到了纯数据活儿复制模板把translations/English.lang复制一份重命名成你的语言名如Korean.lang。只译值不译键逐条改 msgstr 后面的内容msgid英文键名和文件头部的加速键声明区一个字都别动否则菜单快捷键会失效。现场验证在设置的语言列表里选中你的文件逐屏检查一遍没问题就把文件交给维护者随下个版本发布。项目官方展示页长这样你的语言合并后就会和另外27个并排站在这里这套翻译架构最值得偷师的4个点 键英文原文源码只认英文键翻译是纯映射。这个思路在任何跨平台项目都能复用新增语言永远不碰代码、不重新编译核心逻辑。单例收口所有入口业务代码从不直接碰语言文件只“要译文”。加载、切换、查表三件事集中在一个类里后续维护成本可控。三种粒度覆盖全部场景窗口、菜单、单字符串调用方按场景选粒度即可不用为每个界面重新发明翻译逻辑。运行时热切换切换重新加载重新翻译免重启。附带好处是译者当场就能看到自己的成果对志愿翻译项目非常友好。把这几条搬回你自己的项目翻译架构设计的大半骨架就已经立住了。【免费下载链接】grepWinA powerful and fast search tool using regular expressions项目地址: https://gitcode.com/gh_mirrors/gr/grepWin创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考