要往返处理 Mac App 的翻译,请导出 Xcode 本地化目录,保留其复数结构和参数映射,然后导入并测试返回的包。本指南使用一个虚构的选择标签,准确展示需要交付和检查的内容。

本任务面向在 Mac 上使用 Xcode 准备译者交付内容的人:发送一条依赖数量的消息进行翻译,再将其带回,并保留原有行为。示例标签为 已在 2 个组中选中 3 个图块。 两个计数都可以独立变化,因此交付内容必须保留的不只是可读的措辞。

导出前定义消息约定

将消息约定视为一份简要规范:应用会查询哪个条目、会提供哪些运行时值,以及哪些值控制语法变化。Apple 文档说明,String.LocalizationValue 支持带插值的可本地化字符串,包括运行时提供的值。文档还介绍了如何使用静态键和单独的默认值,让标识符与显示的源文本不同。String.LocalizationValue

在这个示例中,请在翻译请求旁记录以下约定。这些是针对虚构标签的示例要求,并非 Apple 文件格式。

约定要素 本示例的要求
消息用途 概述当前选中内容
英文源文本 Selected 3 tiles in 2 groups.,两个数字均由运行时提供
参数 1 图块数量;决定 tile 的形式
参数 2 组数;决定 group 的形式
数字表示 保留 Xcode 为每个参数记录的类型和格式说明符
翻译自由度 可以调整句子顺序,但须保留每个参数的含义
必需行为 每个名词都要与各自的计数一致

同时记录项目中实际使用的目录、表和键。翻译时不要另造替代键。Apple 的准备指南说明,可本地化 API 会在构建时填充目录,而 table 或 tableName 参数用于选择目录。指南还支持添加说明字符串上下文的注释。为翻译准备 App 文本

一个实用的示例注释是:选择摘要。参数 1 是选中图块的数量。参数 2 是包含这些图块的组数。两个计数独立变化。每个计数都应与对应的名词搭配。 即使两个参数的数字类型相同,这样也能让译者区分它们。

在目录中准备独立的复数变化

先将消息加入 App 的可本地化源文本,然后构建项目。在字符串目录编辑器中,按住 Control 键并点按相关键,选择 按复数形式变化。Apple 文档说明,Xcode 会确定插值的格式说明符,添加该语言的复数形式,并用现有值初步填充各变体字段。这些预填值仍需编辑。使用字符串目录本地化文本和设置文本变化

对于英文源文本,预期的渲染结果包括 Selected 1 tile in 1 group.、Selected 3 tiles in 1 group. 和 Selected 1 tile in 2 groups. 如果只根据图块数量做出一种选择,就无法正确处理所有组合。

Apple 的字符串目录演示支持通过替换项改变多个参数。每个替换项都包含复数情况,其检查器会标出参数位置和 C 语言格式说明符。运行时会将选中的替换项组合到周围的消息中。了解字符串目录

请使用这种机制处理两个独立计数。需要与计数一致的词语应放在相应变化中,而不是在句子外围保留固定复数形式的名词。如果编辑器允许,请为替换项取有意义的名称,然后检查其映射:图块替换项仍须使用参数 1,组替换项仍须使用参数 2。

不要要求每个目标本地化都复刻英文分支清单。Apple 文档说明,Xcode 会添加特定于语言的复数变化。在源本地化中添加变化也会将变化传播到翻译中;如果只在另一个本地化中添加变化,则只会影响该本地化。导出前请检查实际的目标分支。使用字符串目录本地化文本和设置文本变化

调整措辞时保留参数身份

占位符在句子中的位置与其参数编号用途不同。译者可能需要让组数出现在图块数之前,但不能因此改变应用提供这些值的顺序。

Apple 的格式说明符参考文档介绍了使用 n$ 的位置表示法。例如,%1$lld 表示使用 long long 整数转换的参数 1,%2$lld 则表示使用该转换的参数 2。%d 表示另一种整数表示形式;它不是 %lld 的简写。该参考文档属于归档资料,因此请结合当前目录工作流程,将其用于这些既有的格式规则。字符串格式说明符

以示例格式片段 Groups: %2$lld; tiles: %1$lld 为例。如果参数 1 为 3、参数 2 为 2,预期输出是 Groups: 2; tiles: 3。这个片段只展示参数顺序;它并未实现语法上的复数选择,也不应取代目录中的替换项。

请根据含义、索引和类型检查占位符。只检查是否还剩两个百分号,会漏掉计数互换的问题。只检查类型也会漏掉互换,因为两个值都是整数。反过来,仅为了匹配一种翻译而改变应用的参数顺序,会改变使用该条目的所有其他翻译所依赖的约定。

交付时,请要求译者在调整措辞的同时保留导出的参数关联和格式类型。替换项的结构如有更改,必须依据约定进行明确审核。调整词序完全可能是合适的。

导出译者可回传的交付包

导出前,请启用项目的 使用编译器提取 Swift 字符串 构建设置,以纳入 Swift 可本地化字符串。在项目导航器中选择项目,选取 Product > Export Localizations,选择所需的本地化语言和目标位置,然后导出。Apple 文档说明了这些步骤以及生成的 .xcloc 包。导出本地化内容

两个目录扩展名各有不同用途。项目的 .xcstrings 文件包含其字符串目录。导出的 .xcloc 包用于交给译者;其中的 Localized Contents 文件夹包含 XLIFF,Notes 文件夹可存放补充文本。请连同约定说明一起发送该包,而不要把消息简化成只有可见句子的两列表格。导出本地化内容

请确认翻译工具支持在 XLIFF 中处理字符串目录变化。Apple 说明,基于目录的变化标识符会编码字符串键和变化配置,并介绍了用于该导出表示形式的 Localization Prefers String Catalogs 设置。这些结构必须在往返过程中保留下来。了解字符串目录

请使用以下实用的交付清单。这是根据文档所述的包结构和示例约定制定的工作流程建议。

  • 返回翻译后的 .xcloc 包,并保留相关资源。
  • 保留消息标识符和变化路径,除非已记录有意进行的结构更改。
  • 为目标本地化所需的复数分支提供目标文本。
  • 保留参数身份、数字类型和替换项映射。
  • 标明导出后收到的任何源文本更改,以便在导入前协调处理。

如果译者使用的工具无法保留带变化的条目,请使用 Xcode 编辑导出的本地化文件,或将翻译填入项目的目录。Apple 文档介绍了如何在 Xcode 中编辑 XLIFF 目标文本和字符串目录;之后的导出会包含目录更改。仅交换纯文本会让人不得不重新构建变化结构。编辑 XLIFF 和字符串目录文件

导入回传内容并检查实际差异

请保留原始导出,以供比较。收到翻译包后,选择项目并选取 Product > Import Localizations。选择 Xcode 本地化目录文件夹。在导入界面中,通过 Issues View 检查警告和错误,并在完成导入前通过 File View 检查更改。Apple 表示,比较编辑器左侧显示导入版本,右侧显示项目当前版本。导入本地化内容

对于源自目录的字符串,Apple 文档说明应将翻译导入相应的字符串目录。导入后,重新打开选择摘要条目,检查两个替换项、它们的参数映射以及目标分支。了解字符串目录

如果发现异常,请按以下顺序进行针对性排查。如果缺少条目,请将其表和键与原始导出进行比较。如果缺少复数变体,请比较返回文件中的变化结构。如果计数与错误的名词搭配,请比较参数映射。如果只有一种组合读起来不对,请先检查该分支的文本,再更改应用代码。此顺序依据示例中的依赖关系制定;这并不意味着 Xcode 会自动检测所有约定违规。

用不相等的计数测试,发现参数互换

成功导入表示 Xcode 已接受交付内容。示例仍需进行行为检查。请使用 App 的测试数据或开发测试样本,渲染以下组合。这些预期句子展示了英文源文本约定;目标措辞和分支选择应遵循目标本地化。

图块数 组数 预期的英文源文本输出 有助于发现的问题
1 1 Selected 1 tile in 1 group. 两处单数形式
3 1 Selected 3 tiles in 1 group. 图块数量独立变化
1 2 Selected 1 tile in 2 groups. 组数独立变化
3 2 Selected 3 tiles in 2 groups. 数值不相等,可发现参数互换

如果 App 能显示空选择,请再检查计数为零的情况。同时选择能涵盖每种目标本地化所需复数类别的数值。上表四行涵盖了英文的单复数组合,但并未涵盖所有可能的目标分支。

要以目标本地化语言运行 Mac App,请选择 Product > Scheme > Edit Scheme,选择 Run,再打开 Options。设置 App Language,并在需要时设置 App Region;关闭编辑器,选择 Mac 运行目标,然后运行。Apple 文档介绍了这种基于方案的测试工作流程。运行 App 时测试本地化内容

请阅读渲染出的消息,并检查它在桌面界面中的显示效果。如果计数与正确的名词搭配、每个必需分支都能正常工作,并且返回的结构符合预期约定,那么本次翻译往返就保留了该标签所需的行为。请将约定说明与交付内容一并保存,以便依据相同的明确要求检查下一次措辞更改。

来源