翻译 VirtualBox (I18N)
本文档介绍了没有扎实软件工程技术背景的用户如何为其他语言贡献翻译。该过程非常简单,基于易于使用的 Qt Linguist 工具,该工具是 Qt C++ 版本 5 工具包的一部分。
如果您只想指出现有翻译中的错误或任何其他问题,您应该在 工单:4503 的末尾添加评论。建议翻译人员通过在工单中添加简短评论来订阅该工单,以便他们能够收到工单更新的通知。
所有语言都可以进行翻译,包括非拉丁字母语言。该过程要求您进行初步翻译,然后随着 VirtualBox 的发展而不断更新。原始语言是英语,它与德语和俄语一样,由 VirtualBox 团队处理。Qt Linguist 工具还将帮助您查找 VirtualBox 新版本中需要更新的翻译部分。
我们已尽力使翻译方法的信息尽可能易懂,但如果您仍有不清楚的地方,请随时在开发者邮件列表上提问。
语言文件命名和位置
VirtualBox 中的所有语言文件均按以下规则命名
<component>_<lang>
其中 <component>
是组件名称,<lang>
是语言标识符。<component>
部分的可能值包括
VirtualBox | VirtualBox GUI 前端 |
qt | Qt 库本身 (内置对话框和其他资源,如键名) |
语言标识符的形式为 <language>[_<TERRITORY>]
,其中 <language>
是由 ISO 639 定义的两位字母语言代码,可选的 <TERRITORY>
是由 ISO 3166 定义的两位字母地区(国家)代码。请参阅本节末尾的语言文件名称示例。
运行时使用的二进制语言文件位于包含组件可执行文件的目录的 nls
子目录中,并具有 .qm
扩展名。源翻译文件位于组件源代码树的 nls
子目录中,并具有 .ts
扩展名。
运行时,VirtualBox 会按照以下顺序为给定的语言标识符 xx_YY
选择一个二进制语言文件(第一个匹配项胜出)
<component>_xx_YY.qm
<component>_xx.qm
- [内置英语翻译]
语言标识符最初是根据当前用户的区域设置选择的。
以下是一些语言文件名的示例
qt_de.qm
(Qt 翻译,德语,所有地区)VirtualBox_ru.qm
(VirtualBox GUI 翻译,俄语,所有地区)VirtualBox_zh_TW.qm
(VirtualBox GUI 翻译,中文,台湾)
先决条件
要创建新翻译或更新现有翻译,您将需要 Qt Linguist 工具 来编辑 .ts
文件。要获取 Qt Linguist,请从 Qt 网站下载适用于您平台的最新 5.x.x 版本的 Qt C++ 工具包开源版。或者,您可以尝试下载工具包源代码并自行编译以获取 Qt Linguist 应用程序。请注意,我们不接受由 Qt Linguist 版本 3(Qt 工具包 3.x.x 的一部分)处理的翻译文件,因为语言文件的格式与 Qt 的新版本不兼容。
请注意,执行翻译或测试翻译不需要完整的 VirtualBox 源代码。有关详细说明,请参阅下文。
准备新语言的翻译
本节介绍如何开始将 VirtualBox 翻译成一种新语言。
- 根据上述规则为您的语言定义一个语言标识符。如果您的语言翻译因国家/地区而异,请使用
_<TERRITORY>
后缀,否则省略它(即,如果它代表唯一的可能国家,则无需应用此后缀)。假设出于本说明的目的,您的语言代码是my_MY
。
- 检查您的语言是否尚未列在 工单:17708(翻译工单)中。
- 在 工单:17708 中添加评论,说明您将维护您语言的翻译,以告知其他可能想参与的人。在添加此类评论之前,请检查是否没有其他人已经开始翻译同一种语言。
- 从网页 https://virtualbox.ac.cn/download/testcase/nls/ 下载文件
VirtualBox_xx_YY.ts
和qt_xx_YY.ts
到您的计算机(请注意,该页面的地址可能会偶尔更改,如有疑问请返回此说明页面查看),并使用上述语言标识符重命名文件以适应您的语言。例如,VirtualBox_yi.ts
对于意第绪语是正确的名称,qt_sw_TZ.ts
对于坦桑尼亚斯瓦希里语是正确的名称。
- 启动 Qt Linguist,打开并翻译您在步骤 5 中获取的新文件。
- 确保
VirtualBox_my_MY.ts
文件中名为@@@
的特殊上下文中的所有字段都已正确翻译(详见下文)。
- 确保您在翻译时遵循了翻译提示。
- 请参阅下面的测试翻译部分,在运行时检查您的翻译。
- 按照提交翻译部分中的描述提交您的翻译。
特殊上下文 @@@
名为 @@@
的特殊上下文包含识别给定翻译文件所需的翻译项,因此您必须确保它们已正确翻译。此上下文目前仅存在于 VirtualBox_my_MY.ts
文件中。此上下文中有五个项
- 本地语言名称(原始值为
English
)。将其翻译成您所翻译语言的通用、人类可读的名称,并以该语言本身书写。例如,对于俄语,它将是Русский
。请注意,.ts
文件名中的<language>
部分必须与此处指定的语言匹配。
- 本地语言国家/地区名称(原始值为
--
)。如果您的翻译语言无论口语地区(国家)如何都相同,则将其翻译为空字符串。如果您正在翻译您语言的特定变体,请将此项翻译成该变体所使用的地区(国家)的通用、人类可读的名称,并以该语言本身书写。请注意,.ts
文件名中的<TERRITORY>
部分必须与此处指定的语言匹配。
- 语言名称(英语)(原始值为
English
)。与第 1 项相同,但使用语言名称的常用英语拼写。
- 语言国家/地区名称(英语)(原始值为
--
)。与第 2 项相同,但使用地区(国家)的常用英语拼写。
- 翻译人员列表(逗号分隔)(原始值为
Oracle Corporation
)。此项用于指定参与此翻译的作者列表。请在此处使用拉丁字母,以便所有人都能阅读。
此特殊上下文中的每个项都具有自描述的注释字段,因此即使它们的顺序与此处列出的顺序不同,在您的翻译文件中查找它们也不会很困难。
获取翻译文件的最新更改
现有的 .ts
文件由 Oracle 的 GUI 维护人员定期与源代码同步,通常在新产品发布前几周或用户界面 (UI) 中出现大量与语言相关的更改后进行。进行此同步是为了将 UI 中使用的新(未翻译)字符串添加到 .ts
文件中,这些字符串随后需要由贡献者翻译。更新将在 工单:17708 上公布。要翻译新添加的文本,您应该用网页上的新翻译文件替换您计算机上的翻译文件副本,这些新文件将包含您之前提交的任何工作。
更新他人完成的翻译
如果您想继续他人完成的翻译,请执行以下步骤
- 如上所述,确定您语言的语言标识符。如果您的语言翻译因国家或地区而异,请使用
_<TERRITORY>
后缀,否则省略它(即,如果它代表唯一的可能国家,则无需应用此后缀)。假设出于本说明的目的,您的语言代码是my_MY
。
- 查阅 工单:17708 的评论,了解目前谁在维护您语言的翻译。通过在 工单:17708 中添加评论来联系这些人,以便协调您的工作并避免冲突(如果您将处理该语言的新区域变体,则此点不太重要,但请考虑协同工作仍能带来很多好处)。
- 从准备新语言的翻译部分中提及的网页复制现有翻译文件。如果您正在处理该语言的新区域变体,请相应地重命名文件。
- 遵循准备新语言的翻译部分中从步骤 6 开始的其他步骤。
翻译提示
本节包含有关翻译 VirtualBox 产品的注意事项。
- 阅读 Qt Linguist 手册以获取有关翻译 Qt 应用程序的通用信息。请特别注意理解可翻译项的状态(未完成、已过时)。
- 正确翻译复数形式。VirtualBox 可能包含带有
%n
标记的句子。当数字可能以单数或复数形式包含时,使用此标记。Qt 翻译机制允许您将此句子翻译成不同的变体,以使结果看起来更自然。有关此主题的更多信息,请参阅翻译中的复数形式。
- 如果空格用于对齐目的,请保留单词周围(和之间)的空格。此类项的示例是全局和虚拟机设置对话框中的类别名称,其中前导和尾随空格字符用作水平项边距。此外,可翻译项中的前导空格通常用作与字符串连接后出现的前一个单词的分隔符,因此需要保留。
- 仅翻译人类可读的单词和句子。请勿改动 HTML 标记和其他特殊字符——否则您可能会完全破坏 UI 中的文本显示。
- 不要翻译
VBoxGlobalSettingsDlg
和VBoxVMSettingsDlg
上下文中以#
(哈希)符号开头的项目,例如#general
、#input
等。它们负责虚拟机详细信息页面上的设置类别超链接功能,翻译它们将破坏此功能。
- 当 Qt Linguist 显示可翻译项的源文本时,它会在其中使用特殊的文本片段来标记不可打印字符,例如:
(new-line)
用于换行符标记,或(sp)
用于模糊的空格字符。但是,如果您将源文本复制到翻译字段(用作翻译模板),Qt Linguist 不会将这些特殊片段替换回真正的控制/格式字符——它们在翻译中仍将保留为(new-line)
和(sp)
,并会以这种方式出现在 GUI 中。因此,您应该小心并始终手动将它们替换为相应的格式字符(换行符或空格)。
- 通常,不建议翻译
Ctrl+<latin_letter>
快捷方式(例如,用于打开虚拟机设置对话框的 Ctrl+S),因为它们旨在与语言无关,无论选择何种 UI 语言都应具有相同的操作。仅当您的语言中有非常特殊的理由时才翻译它们;否则,只需保留原文。请注意,操作名称以不同字母开头或在您的语言中具有不同下划线 (Alt+<any_letter>
) 加速键并不是翻译相应Ctrl+<latin_letter>
快捷方式的有效理由。
测试翻译
使用以下步骤测试您的翻译
- 从 Qt Linguist 主菜单中选择文件 -> 发布为...。
- 将
<path_to_VirtualBox_exe>/nls4/VirtualBox_my_MY.qm
指定为目标路径和文件名,然后按确定。这将生成一个二进制语言文件并将其保存到正确的目录。
- 对所有其他组件(
qt_my_MY.qm
)重复上一步。
- 设置与
my_MY
语言标识符对应的区域设置并启动VirtualBox.exe
。如果操作正确,语言文件应自动加载。
- 浏览用户界面的所有部分,并检查翻译的质量和准确性。
提交翻译
当您认为您的翻译良好并准备好与他人分享时,您可以将您创建的翻译源文件(根据上述示例,即 VirtualBox_my_MY.ts
和 qt_my_MY.ts
)打包到一个名为 VirtualBox_my_MY.zip
的 .zip 压缩包中,并将其附加到 工单:17708。
更新现有翻译后也应执行相同的操作,但请注意您附件的文件名,并确保您不会用相同的文件名替换他人的附件。不过请注意,如果先前相同名称的附件也是由您附加的,并且它包含您现在附加的翻译文件的过时版本,则您通常应该替换它。
请记住,在您的翻译被纳入 VirtualBox 代码库和分发档案之前,您必须允许 Oracle 公司使用您的贡献。贡献者信息部分描述了如何执行此操作。基本上,您有两种选择:填写 Oracle 贡献者协议 (ICA) 并发送给 Oracle 公司,或者直接在您附加翻译源文件的 工单:17708 评论中做出以下声明
The <MyLanguage> (<my_MY>) translation attached here by <my_full_name> is published under the terms of the [wiki:"MIT license"].
假设 <MyLanguage>
是语言名称,<my_MY>
是语言标识符,<my_full_name>
是您的全名,其拼写与您在 .ts 文件本身中(在特殊上下文 @@@
的翻译人员列表中)使用的拼写完全相同。对于给定的语言,只需执行一次即可。如果您将 VirtualBox 翻译成多种语言,则每种语言都需要单独的声明。