ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

GPT4All 界面国际化翻译实战:用 Qt Linguist 编辑 .ts 文件并用 lrelease 本地验证译文

GPT4All 界面国际化翻译实战:用 Qt Linguist 编辑 .ts 文件并用 lrelease 本地验证译文 GPT4All 界面国际化翻译实战用 Qt Linguist 编辑 .ts 文件并用 lrelease 本地验证译文【免费下载链接】gpt4allGPT4All: Run Local LLMs on Any Device. Open-source and available for commercial use.项目地址: https://gitcode.com/GitHub_Trending/gp/gpt4all本篇技术文章围绕 GPT4All 桌面应用gpt4all-chat的界面翻译协作流程展开完整覆盖从安装配置 Qt Linguist、定位并编辑translations目录下的.ts翻译文件、使用lrelease编译出.qm文件做本地验证到最终通过 Pull Request 提交译文的每一步操作。读完后你将能够独立完成 GPT4All 某一种语言界面的翻译与验证并能从源码层面理解应用是如何发现、加载和切换翻译文件的。一、准备工作Qt Linguist 与本地仓库为 GPT4All 贡献外文翻译需要满足两个前提条件在本地文件系统克隆 GPT4All 仓库若需要 git clone可使用 https://gitcode.com/GitHub_Trending/gp/gpt4all 安装 Qt 生态中的图形化翻译工具Qt Linguist。该工具是 Qt 安装包的一部分可通过 Qt 在线安装器按“自定义安装”方式单独选取。Qt Linguist 的工作方式是加载特定的.ts翻译文件Translation Source 的 XML 工程文件在其中逐条填写译文再由命令行工具lrelease将.ts编译为应用运行时真正加载的.qm二进制文件。理解这条「.ts源码入库→.qm编译产物运行时加载」的链路是理解 GPT4All 整个翻译验证机制的关键。安装 Qt Linguist 的步骤按官方文档给出的安装路径操作注册一个免费的 Qt 账户下载对应操作系统的 Qt Online Installer登录并同意 (L)GPL 3 许可条款可选择是否发送匿名使用统计在安装目录页保持默认路径选择Custom Installation自定义安装在 Qt 分组下勾选最新的 Qt 6.x 版本以及Developer and Designer ToolsLinguist 就包含在这一组里。官方文档特别提示这会安装远多于 Linguist 单个工具的内容可以按需取消勾选但作者保留了最容易出错的完整步骤——这套组件同时也能用于从源码构建 GPT4All一举两得。安装后 Linguist 的典型位置平台可执行文件位置WindowsC:\Qt\6.7.2\msvc2019_64\bin\linguist.exemacOS/Users/username/Qt/6.7.2/macos/bin/Linguist.appLinux/home/username/Qt/6.7.2/gcc_64/bin/linguist其中6.7.2随实际安装的 Qt 版本变化下文lrelease的路径同理替换即可。二、翻译文件在哪里gpt4all-chat/translations目录克隆仓库后所有界面翻译源文件都位于 gpt4all-chat/translations 目录。当前仓库中已包含 7 个语言文件gpt4all_en_US.ts —— 英语基准文件gpt4all_zh_CN.ts —— 简体中文gpt4all_zh_TW.ts —— 繁体中文gpt4all_es_MX.ts —— 墨西哥西班牙语gpt4all_pt_BR.ts —— 巴西葡萄牙语gpt4all_ro_RO.ts —— 罗马尼亚语gpt4all_it_IT.ts —— 意大利语这些文件与 CMake 构建脚本中声明的翻译清单完全对应。在 gpt4all-chat/CMakeLists.txt 中qt_add_translations(chat ...)宏正是把这 7 个.ts文件纳入构建流程构建时由 Qt 工具链自动编译成.qm并打包进程序内部资源运行时路径为:/i18n。若你负责的语言还没有对应的.ts文件官方文档给出的做法是复制英语文件gpt4all_en_US.ts为一个新的、符合命名规则的文件形如gpt4all_{lang}.ts其中{lang}采用地区_语言的 BCP-47 风格写法如fr_FR、ja_JP然后在新文件上编辑。.ts文件的内部结构以仓库中的简体中文文件 gpt4all_zh_CN.ts 为例它是一份带TS version2.1声明的 XML 文档结构为「context来源组件→ message消息单元→ source / translation原文 / 译文」三层context nameAddCollectionView/name message location filename../qml/AddCollectionView.qml line45/ source← Existing Collections/source translation← 存在集合/translation /message message location filename../qml/AddCollectionView.qml line68/ sourceAdd Document Collection/source translation添加文档集合/translation /message /context从中可以读出三个对译者有用的信息context的name对应 QML/C 中的组件名如AddCollectionViewLinguist 正是按组件分组展示待译条目location标注了原文所在的源文件与行号例如../qml/AddCollectionView.qml第 45 行便于译者回源码查证上下文source是唯一键修改译文时只能改translation不要动source否则与程序内部tr()查找失配译文将不生效。另外一个值得注意的细节QML 源码中存在大量形如// This usage of System Locale should not be translated的注释例如 gpt4all-chat/qml/ApplicationSettings.qml 第 202、213、248 行附近提醒译者某些同词在不同语境下含义不同Auto、System Locale、Application default 作为菜单/设置项标签应按源码注释指引决定是否译为字面文本。三、开发过程中实时预览译文lrelease 模型目录这是官方文档中最具实战价值的一步——不必重新编译整个 GPT4All 就能在应用里看到自己的译文。流程是找到 GPT4All 存放模型的目录即你在设置里配置的模型下载目录把翻译文件.ts放入该目录运行lrelease编译例如Linux 路径示例/path/to/Qt/6.7.2/gcc_64/bin/lrelease gpt4all_{lang}.ts{lang}替换为你翻译的语言代码如gpt4all_ja_JP.ts命令会在同一目录生成gpt4all_{lang}.qm文件重启 GPT4All此时设置界面的语言下拉框中就会出现你正在开发的语言选项。源码层面的机制印证这个“把.qm丢进模型目录即可生效”的魔法在 gpt4all-chat/src/mysettings.cpp 的MySettings::filePathForLocale()中可以得到完整解释// Scan this directory for files named like gpt4all_%1.qm that match and if so return them first // this is the model download directory and it can be used by translation developers who are // trying to test their translations by just compiling the translation with the lrelease tool // rather than having to recompile all of GPT4All QString directory modelPath(); for (const QString bcp47Name : uiLanguages) { QString filePath u%1/gpt4all_%2.qm_s.arg(directory, bcp47Name); QFileInfo filePathInfo(filePath); if (filePathInfo.exists()) return filePath; } // Now scan the internal built-in translations for (QString bcp47Name : uiLanguages) { QString filePath u:/i18n/gpt4all_%1.qm_s.arg(bcp47Name); QFileInfo filePathInfo(filePath); if (filePathInfo.exists()) return filePath; } return u:/i18n/gpt4all_en_US.qm_s;从源码结构看翻译文件的查找优先级非常清晰先扫模型目录按系统 locale 的uiLanguages()列表BCP-47 名称-统一替换为_逐个匹配gpt4all_{lang}.qm命中即返回——这就是文档中“把.qm放进模型目录就能看到自己译文”的实现依据再扫内置资源查找编译期内置的:/i18n/gpt4all_{lang}.qm即 CMake 中qt_add_translations打包的 7 种语言兜底找不到任何匹配时回落到:/i18n/gpt4all_en_US.qm即英语。语言列表的生成逻辑在 gpt4all-chat/src/mysettings.cpp 的getUiLanguages()中它同样先扫描模型目录下的*.qm注释明确写着“用于翻译开发者在无需重编译整个 GPT4All 的情况下加载开发中的译文”再合并内置语言且内置语言必须命中白名单releasedLanguages { en_US, it_IT, zh_CN, zh_TW, es_MX, pt_BR, ro_RO }才会出现在下拉框中。也就是说内置语言是“已发布语言”而模型目录里的.qm没有白名单限制——任何语言只要文件就位就会出现在设置里这恰好构成了译者最灵活的开发调试通道。运行时翻译器的加载与切换真正安装翻译器的是 gpt4all-chat/src/mysettings.cpp 中的MySettings::setLanguageAndLocale()应用启动时gpt4all-chat/src/main.cpp 会在 QML 引擎启动之前就调用mySettings-setLanguageAndLocale()保证界面框架的字符串一开始就走翻译通道该方法先移除旧的QTranslatorqGuiApp-removeTranslator再依据filePathForLocale()的结果load()对应的.qm并qGuiApp-installTranslator()语言选择在 QML 侧暴露为属性gpt4all-chat/src/mysettings.h 声明了Q_PROPERTY(QString languageAndLocale READ languageAndLocale WRITE setLanguageAndLocale NOTIFY languageAndLocaleChanged)设置在界面切换语言时会即时移除/安装翻译器无需重启应用。四、用 Qt Linguist 编辑译文安装完成后打开 Qt Linguist执行以下操作打开翻译文件导航到本地克隆的仓库中gpt4all-chat/translations目录选择你要贡献的语言文件如 gpt4all-chat/translations/gpt4all_zh_CN.ts若目标语言文件尚不存在先按上文“复制英语文件改名”的方式创建逐条填写Linguist 左侧按组件context分组列出所有消息每条消息显示原文source与所在源码位置在译文栏填入目标语言标记状态新条目 / 已翻译 / 模糊会自动更新保存文件编辑完成后直接保存.ts文件即可。Qt 官方提供有面向译者的 Linguist 使用手册和讲解视频可作为工具用法参考Qt 文档站点 Linguist Manual for translators。五、提交你的翻译译文完成并通过本地验证后贡献回项目有两种途径推荐为gpt4all-chat/translations目录下的.ts文件改动打开一个 Pull Request。若新增了语言记得该文件命名需符合gpt4all_{lang}.ts规则{lang}与.qm运行时查找所用的 BCP-47 代码一致备选把翻译文件分享给 GPT4All Discord 社区中的项目管理员由其代为合入。提交前建议自查.ts文件是合法 XMLsource未被改动本地lrelease编译无报错生成的.qm能放入模型目录并被应用识别语言下拉框出现该语言实际在应用界面逐屏走查一遍关键界面聊天视图、模型管理、设置、本地文档确认无漏译或错译的显示问题。小结GPT4All 的翻译工作流可以概括为一条闭环从 gpt4all-chat/translations 取.ts文件没有则复制gpt4all_en_US.ts改名用 Qt Linguist 编辑并保存lrelease gpt4all_{lang}.ts生成.qm放入模型目录重启应用即可在设置的语言下拉框中实时预览——该机制由 mysettings.cpp 中“模型目录优先、内置:/i18n次之、英语兜底”的查找策略保证验证通过后以 Pull Request 形式把.ts文件贡献回仓库由qt_add_translationsCMakeLists.txt纳入后续构建。整个流程最大的便利在于译者全程只需一个 Qt 工具链和lrelease命令无需参与完整的 C/Qt 构建即可完成翻译、验证与提交的完整循环。【免费下载链接】gpt4allGPT4All: Run Local LLMs on Any Device. Open-source and available for commercial use.项目地址: https://gitcode.com/GitHub_Trending/gp/gpt4all创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表