一行界面文字如何变成 28 种语言?grepWin 国际化与多语言支持机制拆解
一行界面文字如何变成 28 种语言grepWin 国际化与多语言支持机制拆解【免费下载链接】grepWinA powerful and fast search tool using regular expressions项目地址: https://gitcode.com/gh_mirrors/gr/grepWin当你在搜索结果右键菜单里看到打开所在文件夹五个字时它经历了什么grepWin 国际化的核心是CLanguage类正是它让工具开箱支持 28 种语言。把这一行字从屏幕倒回.lang文件再正向走回屏幕全程只有四步。一行翻译文本的旅程先说答案一行界面文字的完整旅程是 文件 → 读入 → 翻译 → 绘制。翻译文本先以键值对的形式存在.lang文件里启动时CLanguage::LoadFile把整个文件读进内存之后每个控件、菜单、提示词在创建时逐级索要翻译粒度从单个字符串到整个窗口不等最终由 Windows 把中文渲染到屏幕上。这就是 grepWin 多语言支持的全貌下文沿这条线逐段拆解。源头.lang 文件长什么样先说答案.lang文件就是键名固定、值可翻译的纯文本键值对。translations/ 目录下 28 种语言平铺存放从German.lang到Arabic.lang每种语言一个文件。打开Chinese Simplified.lang关键内容就是这样的成对行# .lang 文件节选Chinese Simplified.lang msgid %ld more matches msgstr 还有 %ld 个匹配msgid是英文原文兼资源标识翻译者只需把译文填进msgstr键名一概不动。这种集中式管理的直接好处是新增一门语言等于新增一个文件核心代码一行不用碰。CLanguage 如何把文本送上屏幕先说答案CLanguage提供三层接口粒度从一行字到整个窗口一层比一层省事。它位于依赖库 sktoolslib/ 中采用单例设计——全局共享一个实例保证所有界面读同一份语言资源。最细粒度单字符串TranslatedString。构建右键菜单时逐项取翻译文本// src/ShellContextMenu.cpp ::InsertMenu(m_menu, 1, MF_BYPOSITION | MF_STRING, 1, TranslatedString(g_hInst, IDS_OPENCONTAININGFOLDER).c_str());效果右键菜单里出现了打开所在文件夹换成其他语言就显示对应译文。中间粒度菜单项TranslateMenu。不用逐条查整张弹出菜单一次翻完// src/BookmarksDlg.cpp CLanguage::Instance().TranslateMenu(hPopup);效果书签弹出菜单的所有条目一次调用后按当前语言重绘。最粗粒度窗口控件TranslateWindow。对话框初始化时按控件 ID 批量翻译// src/SearchDlg.cpp CLanguage::Instance().TranslateWindow(*this);效果主界面的标签、按钮、提示文本一次性全部换好无需逐个设置。启动与切换两条时间线先说答案无论首启还是中途换语言动作都是同一套读文件、翻窗口区别只在触发点。时间线 A首次启动程序去查上次记住的语言然后读入// src/grepWin.cpp CLanguage::Instance().LoadFile( bPortable ? iniValue : regValue);即 注册表或便携版 INI →LoadFile解析键值 → 各窗口依次TranslateWindow→ 界面以对应语言出现。时间线 B设置中切换语言在设置对话框的语言下拉框里选中新语言并确认后代码直接执行// src/Settings.cpp CLanguage::Instance().LoadFile(langPath); CLanguage::Instance().TranslateWindow(::GetParent(*this));即LoadFile重载 → 对当前窗口重新TranslateWindow→ 界面原地刷新全程无需重启应用。三步给 grepWin 加一门新语言先说答案加一门语言零代码改动三步走完。① 复制 translations/ 里的English.lang作为模板改名为你的语言比如Malay.lang。做完这步目录里会多出你的文件这就是唯一的代码改动。② 键名保持不动只改msgstr里的值。对照英文原文逐条填译文像About grepWin...这种带的条目记得保留助记符格式填完保存即可。③ 打开 grepWin在设置的语言下拉框里选中你的新语言点确定。界面上所有文字都该变成你的语言了——如果某处还是英文说明第 ② 步有漏填按位置回头补上。如果项目里还没有你的语言它正缺这么一个文件放进 translations/ 目录整个界面就会说你的母语。【免费下载链接】grepWinA powerful and fast search tool using regular expressions项目地址: https://gitcode.com/gh_mirrors/gr/grepWin创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
