本文档解释了 GPT4All 如何实现国际化 (i18n) 来支持多种语言。它涵盖了翻译流程、支持的语言以及如何贡献新的翻译或更新现有翻译。
GPT4All 使用 Qt 内置的国际化框架来提供多语言用户界面。该系统基于在源代码中用翻译函数标记字符串,并将翻译存储在单独的文件中,这些文件在运行时根据用户的区域设置进行加载。
图示:国际化流程
来源
GPT4All 目前支持以下语言
| 语言 | 本地化 | 翻译文件 |
|---|---|---|
| 英语 | en_US | gpt4all_en_US.ts |
| 意大利语 | it_IT | gpt4all_it_IT.ts |
| 罗马尼亚语 | ro_RO | gpt4all_ro_RO.ts |
| 中文(简体) | zh_CN | gpt4all_zh_CN.ts |
| 西班牙语(墨西哥) | es_MX | gpt4all_es_MX.ts |
| 葡萄牙语(巴西) | pt_BR | gpt4all_pt_BR.ts |
| 中文(繁体) | zh_TW | gpt4all_zh_TW.ts |
向用户显示的语言由系统的区域设置决定,因为目前 UI 中没有明确的语言选择功能。
图示:GPT4All 中的语言支持
来源
在 GPT4All 中,QML 界面中的所有面向用户的字符串都使用 qsTr() 函数进行翻译标记。此函数接受一个字符串作为输入,并根据当前区域设置在运行时返回其翻译后的版本。
来自 main.qml 的示例
来自 ChatView.qml 的示例
来源
翻译文件使用基于 XML 的 .ts 格式,其中包含上下文(通常对应于 QML 文件)、消息(待翻译的字符串)及其翻译。
在此结构中
<context> 按源上下文(通常是 QML 文件)对消息进行分组<message> 包含原始文本及其翻译<location> 标识字符串在源代码中的位置来源
GPT4All 在应用程序的许多 UI 组件中实现了国际化。
图示:国际化的 UI 组件
来源
要添加新翻译或更新现有翻译
使用 lupdate 提取可翻译的字符串
lupdate gpt4all-chat -ts gpt4all-chat/translations/gpt4all_<locale>.ts
使用 Qt Linguist 编辑 .ts 文件提供翻译。
将翻译编译为二进制 .qm 格式
lrelease gpt4all-chat/translations/gpt4all_<locale>.ts
将编译后的文件包含在应用程序的资源中。
图示:翻译工作流
来源
翻译 GPT4All 字符串时
保留格式:在翻译后的字符串中保留 HTML 标签和占位符(例如 %1、%2)。
上下文感知:使用 Qt Linguist 理解每个字符串的上下文。
遵守 UI 空间限制:某些语言比英语需要更多的空间。UI 应适应不同的文本长度。
测试翻译:验证翻译是否正确显示并且不会破坏 UI 布局。
一致性:在整个应用程序中保持一致的术语。
GPT4All 国际化系统的潜在增强功能可能包括
语言选择 UI:添加显式语言选择,而不是仅依赖系统区域设置。
运行时语言切换:允许在不重新启动应用程序的情况下更改语言。
翻译完整性指标:用于跟踪翻译覆盖率百分比的工具。
贡献者指南:为翻译人员提供的具体文档。