本地化系统概述

每个项目的本地化工作都会涉及一些关键概念:

OverviewDiagram.png

文本 (Text)

文本是本地化的基本元素。文本是由命名空间、键名、源字符串和显示字符串共同组成。通过命名空间和键名便能为文本定义唯一的标识索引。 通过使用不同的命名空间,可以帮助在不同上下文的环境下同样的文本单来表达不同的意思。键提供了与文本有关的特定上下文。 源字符串是尚未翻译原文形式的字符串。显示字符串是将要呈现的字符串形式,通常是根据源字符串翻译而来。

例如,对话框可显示为英语或西班牙语。对话框中可能有一条消息,一个 “OK” 按钮和一个 “CANCEL” 按钮。所有三个文本可能使用了同一个命名空间 “MyProject”。消息文本可以使用一个 “MyMessage” 键,“OK” 文本可以使用一个 “DialogBox.AffirmativeButtonLabel” 键,“CANCEL” 文本可使用一个 “DialogBox.NegatoryButtonLabel” 键。根据命名空间和键,每个文本就可以获得唯一的标识和翻译。

目标 (Targets)

目标指的是经过命名的独立的本地化数据模块。目标中的文本是从一组特定来源中收集,存储在 Manifest 文件内,在针对特定语言 (Culture) 的存档文件中翻译,编译成针对特定语言的本地化资源文件,然后由系统加载以供显示。

一个项目可以只有一个目标以便简化实施,也可以有多个目标以便将项目的本地化数据分成各个独立部分。Unreal 编辑器就有一个独立于虚幻引擎其他部分的目标,因此可以在对编辑器进行本地化的同时,避免将编辑器的本地化数据随游戏一起分发。通常来讲,游戏会用一个目标用于游戏本体的本地化数据,并使用额外的目标来实现游戏的扩展包内容。

语言 (Cultures)

语言 (Cultures,以下使用 Culture 来指代避免语义混淆) 也被理解为语言环境 (locale),负责定义文字、脚本和地区之类的细节信息。Culture 是特定编码格式的字符串,必需符合语言编码(ISO-639 标准)、可选脚本编码(ISO-15924 标准)和可选地区编码(ISO-3166 标准),以横线或下划线进行分隔。

Culture 编码的举例:“en”(英语)、“es-MX”(西班牙语,墨西哥地区)、“zh-Hans-CN”(中文,简体,中国地区)。

清单 (Manifests)

清单文件是一种可读的 JSON 格式文本文件,保存了由命名空间和键的映射下整理的文本 (Text) 。清单文件由一个特定的 commandlet 通过收集文本生成。清单文件每次都完全重新创建,不应当以手动方式更改。

存档 (Archives)

存档用于存储源字符串及其翻译,由命名空间映射,并采用可读的 JSON 格式。存档由一个 commandlet 生成,它将从指定的清单中去除所有条目。由于存档中的条目没有键,因此清单中共享命名空间内同一个源的所有条目将合并为一个存档条目,如果文本之间只有键的差别,就会被认为它们在字面上是一样的,并将使用相同的翻译。已经存在的存档将被更新而非截断。存档应该按原样提供,或是转换为其他格式提供给翻译人员进行处理,并返回译文取代空白存根条目。

本地化资源 (LocRes)

LocRes 可将翻译后的文本存储为二进制格式并由系统加载。LocRes 由一个 commandlet 生成,它能编译一个指定的清单和一些指定存档。

系统会根据项目设置和当前 Culture 选择加载 LocRes 文件。LocRes 中对应当前文化的本地化文本可以和 LocRes 中对应当前所有文化的父文化的本地化文本一起使用。这样既可以针对某一语言提供一般性翻译,同时还能针对某一区域提供更加具体的翻译。举一个基本的例子,假设有一个目标中包含文本 “Color” 并支持 “en”(英语)和 “en-UK”(英语,英国地区)的 Culture,那么 “en” LocRes 可能会将 “Color” 本地化成 “Color”,而 “en-UK” LocRes 可能会采用 “Colour” 这一本地化文本。如果用户切换到 “en-CA”(英语,加拿大地区),但 “en-CA” 的 LocRes 缺少对于 “Color” 的本地化信息,那么将会使用 “en” LocRes 里的 “Color”。