有用的译者注释会说明标签的含义、显示位置,以及用户使用它时会发生什么。本指南将介绍如何在 Xcode 中为一个简单的 Mac 形状浏览器编写并附加这些注释,其中使用的是虚构的英文标签。
译者注释应该说明什么?
从译者需要做出的判断入手。像 Round 这样的简短标签没有明确说明语法角色和预期含义。注释可以指出它是描述形状类别的形容词,并说明它显示在一组预览图上方。Apple 建议通过注释说明字符串在界面中的使用位置和方式。探索字符串目录
对于负责准备 Mac 应用标签以供翻译的人来说,具体任务是把每个有歧义的字符串转化为简短、完整的说明。译者应当无需查阅源代码,就能理解字符串的用途。
可以使用这份四部分写作指南。它是根据 Apple 的指导总结出的编辑方法,并非 Apple 要求采用的注释格式:
| 部分 | 要回答的问题 | 示例细节 |
|---|---|---|
| 含义 | 源文案指的是什么? | Round 描述的是轮廓呈曲线的形状。 |
| 界面角色 | 这是什么类型的界面文本? | 显示在形状预览上方的类别标题。 |
| 行为或位置 | 会发生什么,或它周围有什么? | Expand 会在预览图下方显示详细信息。 |
| 可变内容 | 每个插入值可能包含什么? | 第一个值是形状名称;第二个值是集合名称。 |
只写会影响理解的部分。静态标题无需解释操作。对于按钮,应清楚说明点击后会发生什么。对于包含两个插入名称的消息,应说明这两个名称之间的关系。
Apple 特别建议说明界面元素、周围的界面,以及占位符所代表的内容。将这些细节作为实用的翻译背景信息。跟着示例学习:使用 Xcode 探索本地化
将含糊的注释改写为实用的消息说明
以下示例来自一个虚构的 Mac 形状浏览器。每条改进后的注释都描述了假定且明确的界面行为;使用这些文案前,请根据实际控件调整相关行为。
| 源标签 | 不充分的注释 | 更实用的注释 |
|---|---|---|
Shapes |
形状标签。 | 侧边栏导航项,打开几何形状列表。复数名词。 |
Round |
形状文本。 | 显示在轮廓呈曲线的形状预览上方的类别标题。描述这些形状的形容词。 |
Expand |
按钮标题。 | 形状预览下方的按钮,点击后会在预览下方显示详细信息。表示操作的动词。 |
Selected |
选择标签。 | 当前选中用于预览的形状旁边显示的状态。描述该形状的当前状态。 |
不充分的版本只是重复译者已经能看到的信息。更好的版本补充了缺失的关系:形容词描述的是哪个对象、按钮会显示什么内容,或哪个项目处于某种状态。
在英语中,名词指称事物,形容词描述事物,祈使动词则指示执行某项操作。这些区别有助于解释简短的界面文案。例如,在此示例中,Selected 描述的是已有状态;如果按钮上写的是 Select,则表示要求用户执行操作。请说明界面所需的具体含义。
注释应当具体。对于 Expand,请说明控件会显示详细文本、放大预览图,还是展开侧边栏分组。直接说明操作比笼统地说它会让某个东西变大更实用。
避免强加不必要的英语格式规则。如果界面需要简短的类别标题,请说明这一点。不要凭空规定字符数上限,也不要要求译文保留英语语序。只有在确知存在实际布局限制时,才记录该限制。
在 SwiftUI 中添加译者注释
Apple 将 Text 的 comment: 参数列为添加翻译提示的方式。如果某个控件便捷的字符串初始化器无法提供所需注释,可以使用它的内容构建器,并显式指定一个 Text 视图。Apple 以 Label 演示了这种模式,并说明许多 SwiftUI 控件都支持这种做法。为视图准备本地化
以下完整示例是一个小型 macOS SwiftUI 应用。在 Xcode 中,使用 SwiftUI 创建 macOS 应用项目,将部署目标设为 macOS 13 或更高版本,然后用这个单文件替换自动生成的应用和内容视图代码。只保留一个应用入口点。示例使用固定的虚构名称,并在用户点击 Expand 时显示一条详细说明。
import SwiftUI
@main
struct ShapeCommentDemoApp: App {
var body: some Scene {
WindowGroup {
ShapeBrowserView()
}
}
}
struct ShapeBrowserView: View {
@State private var showsDetails = false
private let shapeName = "Circle A"
private let collectionName = "Shape Set A"
var body: some View {
VStack(alignment: .leading, spacing: 16) {
Text(
"Round",
comment: "Category heading above previews of shapes with curved outlines. Adjective describing the shapes."
)
.font(.headline)
Circle()
.fill(Color.blue)
.frame(width: 80, height: 80)
Text(
"\(shapeName) in \(collectionName)",
comment: "Caption below a shape preview. The first value is the shape name; the second is the collection containing it. Sample names: Circle A and Shape Set A."
)
Button {
showsDetails = true
} label: {
Text(
"Expand",
comment: "Button below a shape preview that reveals its details beneath the preview. Verb expressing an action."
)
}
.disabled(showsDetails)
if showsDetails {
Text(
"A shape with a curved outline.",
comment: "Detail sentence revealed below the preview after clicking Expand. Describes the displayed circle."
)
}
}
.padding(24)
.frame(minWidth: 360, minHeight: 300)
}
}
我们已对照文档中的 API 用法检查此示例;由于当前环境没有 Swift 工具链,因此未在此处编译或运行。
对于在 SwiftUI 视图之外创建的面向用户的字符串,Apple 记录了 String(localized:comment:)。使用本地化 API 的注释参数为消息附加上下文。如果查找键和默认源值需要不同,Apple 也支持分别指定它们。准备应用文本以供翻译
按含义和关系说明插入值
示例中的说明文字包含两个 Swift 插值:\(shapeName) 和 \(collectionName)。Swift 插值会将表达式的值插入字符串字面量中。变量名称属于源代码;对译者的说明仍应让看不到这些名称的人也能理解。字符串和字符
对于示例中的虚构值,英文说明文字为 Circle A in Shape Set A。注释说明了插入值的顺序及其关系:一个值表示形状,另一个值表示包含该形状的集合。这比单纯说明有两个字符串参数更有用。
检查含插值的消息时,请问自己三个问题:
- 每个位置可能出现哪类内容:名称、数量,还是其他类型的值?
- 这些值之间有什么关系?
- 对应用能够提供的所有值,注释是否都准确?
请明确标示示例只是样例。这里的 Circle A 和 Shape Set A 用于说明参数各自的作用。它们并不规定必须采用哪种译法,也不构成可能名称的完整列表。
数量需要单独决定实现方式。如果之后添加类似 3 shapes 的说明文字,注释可以解释统计的对象,但语法变体应放在目录中处理。Apple 记录了如何对插值数量使用 Vary by Plural,包括分别设置英语形式,例如 1 item 和 2 items。使用字符串目录本地化和设置文本变体
在 Xcode 中查找并检查注释
要将源代码注释与目录关联起来,请按照 Apple 记录的工作流程操作:
- 选择
File > New > File from Template。 - 筛选
string,在Resource下选择String Catalog,并使用默认名称Localizable创建文件。 - 选择
Product > Build,提取可本地化的字符串。 - 在项目导航器中选择
Localizable.xcstrings。 - 选择
Editor > Assistant,然后选择一个键,在目录旁边检查它的源代码。使用字符串目录本地化和设置文本变体
检查目录中的注释是否符合实际用法。在示例中,Round 应说明它是类别标题,Expand 应说明它会显示详细信息。如果字符串缺失,请检查代码是否使用了可本地化 API,以及是否启用了 Use Compiler to Extract Swift Strings。Apple 指出,基于编译器提取 Swift 字符串需要启用此构建设置。探索字符串目录
Apple 也支持直接在字符串目录的注释列中编辑上下文。Xcode 26 引入了自动生成注释的功能;当前文档介绍了按住 Control 键点按某个键,然后选择 Generate Comment。如果你的环境中没有此选项,可以在代码中附加注释,或在目录中填写注释。跟着示例学习:使用 Xcode 探索本地化、使用字符串目录本地化和设置文本变体
请根据界面行为检查生成的文案。即使描述准确指出了按钮,仍可能需要进一步明确其对象或结果。在此示例中,关键区别是 Expand 会在预览下方显示一条详细说明。
判断含义相同的标签是否可以共用上下文
英语拼写相同并不能证明含义相同。假设另一个屏幕中的 Round 是将数值四舍五入的操作。若将这种用法与形状类别标题合并,就会要求同一个目录条目描述两种不同的语法角色。
Apple 说明,可本地化字符串具有查找键,并属于某个表;键在其所属表内必须唯一。Apple 的 Swift 文档还提供了使用独立键和默认源值的受支持方式。如果不同含义需要分别翻译,即使它们显示的英语文案相同,也应使用不同的键。探索字符串目录、准备应用文本以供翻译
一个实用的判断方法是:看一条注释能否准确解释所有用法。如果含义和界面角色始终一致,共用上下文可能合适。如果注释不得不描述彼此无关的操作,就应重新考虑键的结构。这是根据 Apple 的键和表模型得出的设计推论,并非要求每个控件都必须使用独立字符串。
交付标签前,请脱离源代码单独阅读它的注释。译者应能据此识别预期含义,在概念上了解文本在界面中的位置,并理解任何插入内容。每当标签的行为或角色发生变化时,都要修改注释,确保说明仍符合用户实际看到的界面。
来源
- 使用字符串目录本地化和设置文本变体 — Apple Developer
- 准备应用文本以供翻译 — Apple Developer
- 为视图准备本地化 — Apple Developer
- 探索字符串目录 — Apple Developer
- 跟着示例学习:使用 Xcode 探索本地化 — Apple Developer
- 字符串和字符 — Swift Project