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

资讯详情

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

grepWin 多语言支持原理拆解:28 种语言是怎么做到的

grepWin 多语言支持原理拆解:28 种语言是怎么做到的 grepWin 多语言支持原理拆解28 种语言是怎么做到的【免费下载链接】grepWinA powerful and fast search tool using regular expressions项目地址: https://gitcode.com/gh_mirrors/gr/grepWingrepWin 是一款用正则表达式做全文搜索的桌面工具它的国际化做得相当扎实内置 28 种语言启动时界面自动跟随你的习惯语言显示随时可以在设置里切换。本文以用户操作 → 系统行为的方式拆解 grepWin 国际化的实现思路顺带看看新增一种语言要动几个文件。为什么打开 grepWin界面就是你的语言你会注意到一个细节很多小工具装完打开就是英文而 grepWin 如果你系统语言是中文它第一次启动大概率已经是中文界面了。这个效果并不神秘。启动流程里有一句关键代码位于src/grepWin.cppCLanguage::Instance().LoadFile(bPortable ? g_iniFile.GetValue(Lglobal, Llanguagefile, L) : std::wstring(CRegStdString(LSoftware\\grepWin\\languagefile)));翻译一下程序启动时读取你上次选择的语言文件路径便携版从 ini 读安装版从注册表读交给CLanguage这个单例类加载。之后界面上所有文本都从这份语言文件里查表显示。语言文件全部集中在项目根目录的translations/文件夹下一个.lang文件对应一种语言共 28 个从Chinese Simplified.lang到Vietnamese.lang一应俱全。一次语言切换系统里发生了什么换个角度从你在设置里换了个语言这个动作开始跟踪。整个链路只有四步步骤发生了什么位置1用户在设置对话框选定语言点确定src/Settings.cpp2调用LoadFile(langPath)重新加载语言文件src/Settings.cpp3调用TranslateWindow把主窗口所有控件文本重刷一遍同上4新语言路径被记住下次启动直接生效注册表 / 便携版 ini注意第 3 步不是重启程序而是把已经创建好的控件文字逐一替换掉。这就是为什么 grepWin 换语言是秒切的——窗口结构没变变的是文本内容。CLanguage 单例到底做了什么 所有翻译动作最终都收敛到CLanguage这一个类上它对外暴露的能力可以按界面元素 → 接口来记整窗翻译TranslateWindow。对话框初始化时调一次如CLanguage::Instance().TranslateWindow(*this);窗口里所有静态文本、按钮、标签批量换文。关于对话框、书签对话框等十几个窗口都是这么干的。菜单翻译TranslateMenu。右键菜单是运行时动态插入的项没法走控件翻译所以单独提供菜单接口传入菜单句柄即可整体换文。单条字符串TranslatedString(hResource, IDS_XXX)。用于工具提示、动态拼接的提示语这类散落在代码里的文本查表返回译文例如给按钮挂 tooltip 时AddToolTip(IDC_PATTERN, TranslatedString(hResource, IDS_PATTERN_TT).c_str());三个接口的粒度正好覆盖了三种 UI 载体控件、菜单、字符串用哪个查表都由CLanguage内部那份原文 → 译文映射决定。新增一种语言只需三步语言文件的格式很简单本质是msgid英文原文msgstr译文的键值对以translations/English.lang为例msgid About grepWin... msgstr 给 grepWin 加一门新语言的流程复制模板把translations/English.lang复制一份命名为新语言名如Nepali.lang只改译文文件头部注释写得很清楚——ONLY change the msgstr field只翻译msgstr后面的内容msgid原样保留生效验证在设置里选中新语言LoadFile会自动加载它检查界面、菜单、工具提示是否全部替换。整个过程中没有改任何一行 C 代码翻译资源和程序逻辑是完全解耦的。小结28 份.lang文件集中在translations/目录程序与文本互不依赖加语言零代码改动CLanguage单例提供LoadFile、TranslateWindow、TranslateMenu、TranslatedString四个入口分别负责加载、整窗、菜单和单条文本语言选择在设置里即时生效无需重启启动时则自动恢复上次的选择。【免费下载链接】grepWinA powerful and fast search tool using regular expressions项目地址: https://gitcode.com/gh_mirrors/gr/grepWin创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表