要查找仍显示为已翻译的过时译文,请追踪已更改的源消息,找到它在字符串目录中的条目,重新构建,然后比较措辞。仅凭绿色勾号无法解决你已经发现的差异。

本工作流程适用于使用 Xcode 维护 Mac app,且已有 .xcstrings 目录的开发者。任务是在英文源文本编辑后确定哪些译文需要处理,保留有用的现有文本,并在运行中的 app 中验证修正后的消息。

源消息更改后应该发生什么?

Apple 的文档说明,更改源字符串会将其译文标记为需要审核。目录中的状态包括未翻译字符串(New)、需要处理的字符串(Needs Review),以及带绿色勾号的已翻译字符串。单独的 Stale 状态表示 Xcode 已无法在代码中找到先前翻译过的字符串。探索字符串目录

诊断这个问题时,这些术语很重要。app 仍在使用的消息即使译文过时,也属于审核任务。只搜索目录中的 Stale 状态可能会漏掉它。

Apple 文档所述的源文本更改行为提供了预期结果,但没有说明某个条目为何会保留已翻译状态。如果遇到这种情况,应先调查编辑后的源文本与目录之间的关系,再将勾号视为措辞仍然准确的充分证据。

审核译文前先定位确切消息

从一条已更改的消息开始。记录其之前的英文措辞、当前措辞(如果查找键不同,也记录查找键)以及目录名称。这份简短的对照记录是建议使用的诊断辅助材料,并非 Xcode 功能。当多个条目看起来相似时,它能提供具体的核对依据。

例如,假设桌面按钮之前显示 Open item,现在显示 Open selected items。需要审核的是每种译文是否仍然表达打开当前所选项目的意思,包括可能选中多个项目的情况。仅仅找到 Open 一词的译文,并不能回答这个问题。

区分查找键与显示措辞

Swift 支持使用单独 defaultValue 的显式静态查找键。该默认值通常是开发语言文本,并会在查找失败时使用。comment 可为译者提供上下文。如果未指定表,查找会使用 Localizable;如果未指定包,则会在 app 的主包中搜索。Swift 的显式键字符串初始化器

使用下面这条示例消息记录来区分这些组成部分。以下值均为合成示例,不是目录文件或可执行程序。

组成部分 编辑前 编辑后
查找键 selection.open selection.open
英文源文本 Open item Open selected items
译者上下文 打开单个项目的按钮 打开当前所选所有项目的按钮
目录表 Localizable Localizable

这里标识符保持不变,但消息发生了变化。只比较键名的审查会忽略这次编辑。还要比较源文本值和上下文。

一些 Swift 本地化调用则使用开发语言措辞作为键。Apple 说明,String.LocalizationValue 支持这种模式,包括字符串插值。采用这种方式时,更改措辞也可能更改查找键,因此应同时检查旧条目和新条目,而不要假定译文仍关联同一个标识符。String.LocalizationValue

重新构建并检查源位置

在 Xcode 中选择 Product > Build,然后在项目导航器中选择相关目录。Apple 文档说明,构建会将代码中可本地化字符串的更改更新到目录中。选择 Editor > Assistant,然后选择该键以检查其源位置。使用字符串目录本地化文本并为文本提供变体

将目录中的源文本与预期的编辑结果进行比较。如果目录仍包含 Open item,应先查明新的源文本为何尚未更新到该条目。用旧源文本来审核目标语言译文,无法解决最初的问题。

检查本地化调用中的表和包,尤其是在项目包含多个目录或模块时。Apple 文档说明,可以传入表名来选择目录,并为主 app 包之外的字符串传入相应的包。Apple 还建议使用可本地化 API,以便 Xcode 发现面向用户的文本。准备 app 文本以供翻译

对于手动管理的条目,应直接检查并维护其源文本:Apple 指出,构建同步不会更新或移除手动管理的字符串。不要指望单靠重新构建就能刷新它。探索字符串目录

使用源文本更改决策表比较含义

当前源文本出现在目录中后,选择每种目标语言并检查受影响的条目。Xcode 支持筛选文本并按状态排序,这有助于定位待审核内容。即使特定已更改消息的状态仍为已翻译,也要检查该消息。探索字符串目录

下面的决策辅助表根据消息含义的比较整理而成,并非自动翻译评估。表中的英文标签是合成示例。它有助于确定应让本地化人员检查什么,而不预设每次源文本编辑都要求更改目标语言措辞。

源文本更改示例 检查内容 审核决定
Open item → Open selected items 选择范围以及单复数含义 检查译文是否仍然表达完整操作。
Show details → Hide details 操作方向 检查译文是否相应地改变操作含义。
Items → Items: 标点及标签的位置 只有在当前上下文中仍合适时才保留原措辞。
Open 仍为 Open,但用途发生变化 标签现在是否表示另一种操作 即使源文本相同,也要审核上下文。

针对每个候选条目,比较三点:旧消息表达的含义、当前消息表达的含义,以及译文现在传达的含义。源文本存在可见差异,说明该条目值得审核;但这本身并不能证明目标语言措辞必须更改。

上下文发生变化时,应明确检查。Apple 文档说明,注释可作为译者指引,但检索到的文档并未证明每次注释编辑都会自动使现有译文失效。如果英文标签未变但含义改变,应自行将其加入审核队列。准备 app 文本以供翻译

如果消息包含计数或特定设备的变体,应展开这些变体,而不是只检查父行。Apple 文档说明,目录支持复数和设备变体。英文计数可能需要 1 item 和 2 items;应检查每种目标语言中适用的形式,而不要机械照搬英文语法。使用字符串目录本地化文本并为文本提供变体

处理审核,同时保留有用译文

使用条目的上下文菜单,将有疑问的译文标记为需要审核。如果检查后确认现有措辞仍然合适,请选择 Mark as Reviewed;否则,更新译文。Apple 的字符串目录操作指南介绍了这些审核操作。探索字符串目录

比较更改后的源文本时,保留现有措辞以供参考。仅为减少歧义而清除译文,会丢失有用的比较材料。同样,不要仅因某条译文过时就删除条目:应先确认 app 是否仍在使用其键。

对于合成的选择示例,一份有用的交接内容应包含键 selection.open、从 Open item 到 Open selected items 的更改,以及按钮会打开所有所选项目这一说明。这样本地化人员就能评估具体操作及其范围。

这里有一个实际限制:本工作流程所参考的 Apple 文档没有介绍一种回溯命令,可还原所有未被发现的源文本更改,并找出仍显示为已翻译的条目。如果找不到先前措辞,你可以用当前源文本对照当前译文进行审核,但无法确定差异具体从何时开始。如果需要比较更改前后的内容,请使用可用的较早项目版本或已保存的源文本副本。

在 Mac app 中验证修正后的消息

编辑完成后,测试实际界面。选择 Product > Scheme > Edit Scheme,选中 Run,打开 Options,然后在 App Language 下选择目标语言。关闭对话框,选择 Mac 运行目标,然后运行 app。Apple 文档介绍了这种基于方案的本地化测试方法。运行 app 时测试本地化

回到最初引发调查的确切控件。对于 Open selected items,分别尝试选中一个项目和多个项目。检查标签在两种情况下是否都能描述该操作,以及显示的措辞是否与编辑过的目录条目一致。如果此时出现不匹配,应重新检查查找键、表、包或适用的变体。

最后为每种受影响的语言明确记录处理结果:现有措辞仍然合适、译文已更新,或审核仍待完成。这样就能围绕已更改的消息及其界面行为完成任务,并以目录状态作为支持该决定的依据。

来源