Highlight
Xcode 27 引入编码智能体(Coding Agent),利用 String Catalogs 积累的代码位置、用法描述和多语言参考翻译等上下文,在 IDE 内自动完成 App 多语言本地化,并支持翻译审查、UI 截断检测和迭代优化。
核心内容
机翻做本地化,缺的不是模型,是上下文
软件本地化一直是件麻烦事。传统机器学习模型搞不定软件字符串里的歧义,现代大语言模型虽然通用翻译能力变强了,但没有上下文照样翻车。
英语里的 “book”,到底是名词「书」,还是动词「预订」?同一个词,在不同语言里对应完全不同的翻译。没有上下文,模型只能猜,猜错了用户看到的界面就会莫名其妙。
Apple 从三年前开始做 String Catalogs,一步步解决这个问题。两年前,String Catalogs 开始记录字符串在代码里的位置。去年,开始记录字符串的用法,自动生成描述性注释。今年,Xcode 27 把这些上下文全部喂给了编码智能体,让翻译直接在 IDE 里完成。
一键翻译:从请求到完成的完整流程
(02:19)开发者只需在 Xcode 工具栏点击 New Conversation,告诉智能体「把 App 翻译成加拿大法语」,后续步骤全部自动执行。
智能体先让 Xcode 准备项目:把目标语言加到项目设置里,Build 所有 Target 以发现全部可本地化字符串,然后把新发现的字符串自动写入 String Catalog。如果项目里还没有 String Catalog,Xcode 会自动创建,默认文件名叫 Localizable。
(03:11)开发者也可以用自定义 table name 来组织字符串。比如给 Text 加上 tableName: "Greetings",字符串就会自动写入名为 Greetings 的 String Catalog。
接下来,智能体把字符串分批,分配给多个子智能体并发翻译。Xcode 给每个子智能体提供丰富的上下文:字符串在代码里的位置、使用相似术语的其他字符串列表、甚至该字符串在其他语言中的已有翻译。
(04:14)比如 %lld items 这个字符串,Xcode 会告诉子智能体:这是一个按复数变形的字符串,英语里分 “one item” 和 “two items”。子智能体据此在加拿大法语里也生成对应的复数变体。不同语言的复数规则差异很大,Xcode 确保子智能体始终知道目标语言需要哪些变体。
新功能开发也能自动保持翻译一致
(07:17)翻译不是一次性的活。开发者在已有本地化基础上添加新功能时,智能体同样能自动处理。
演示中,开发者在已有加拿大法语本地化的 App 里加了一个新功能,然后让智能体实现并本地化。智能体在翻译新字符串时,自动沿用了之前开发者手动指定的 “attraits” 作为 “landmarks” 的翻译,而没有使用默认译法。这意味着智能体能在不读取历史对话的情况下,通过 Xcode 提供的项目上下文保持术语一致性。
翻译审查:在发布前发现问题
(08:46)翻译完成后,开发者可以让智能体渲染 UI 预览,检查不同语言下的显示问题。
加拿大法语的句子平均比英语长,容易出现文本截断。智能体直接在预览里标出问题位置,开发者可以判断是改布局、缩短翻译,还是修复实现 bug。
这种审查方式也适用于其他语言特性:泰语字符高度大,容易垂直截断;阿拉伯语从右向左,需要检查视图对齐。发现问题后直接在开发阶段修复,避免上线后用户看到残缺界面。
(10:20)除了智能体审查,Apple 还建议通过 TestFlight 收集母语使用者的反馈。翻译质量不像代码那样容易一眼判断,母语测试者的截图和建议是发现问题的最后一道防线。
详细内容
SwiftUI 字符串本地化
SwiftUI 的 Text 和 Button 等 API 默认就是可本地化的,字符串会自动暴露给本地化系统。
Text("Hello, world!", comment: "A standard greeting")
关键点:
comment参数给翻译提供上下文,避免歧义- SwiftUI 组件会自动把字符串注册到 String Catalog
如果需要自定义 String Catalog 文件名,使用 tableName:
Text("Hello, world!", tableName: "Greetings", comment: "A standard greeting")
关键点:
tableName: "Greetings"会把字符串写入 Greetings.xcstrings 而不是默认的 Localizable.xcstrings- 适合按模块或功能拆分字符串,方便大型项目管理
非 SwiftUI 代码中的本地化
在 ViewModel、数据层或其他非 UI 代码中,需要显式使用本地化 API:
String(localized: "Hello, world!", comment: "A standard greeting")
LocalizedStringResource("Hello World!", bundle: #bundle, comment: "A standard greeting")
关键点:
String(localized:)是最常用的本地化字符串获取方式LocalizedStringResource适合需要把本地化资源传递给其他模块的场景- 硬编码字符串不会被 Xcode 的构建系统发现,必须用这些 API 包装
XLIFF 中的机翻标记
导出 XLIFF 文件给专业翻译人员复核时,机翻内容会带上特定标记:
<trans-unit id="Grand Canyon" xml:space="preserve">
<source>Grand Canyon</source>
<target state="translated" state-qualifier="leveraged-mt">Grand Canyon</target>
<note>Name of the 'Grand Canyon' landmark.</note>
</trans-unit>
关键点:
state-qualifier="leveraged-mt"明确表示这个翻译来自智能体- 专业翻译人员可以按此标记快速筛选需要人工复核的内容
<note>里的注释来自 String Catalogs 自动收集的上下文
给智能体写翻译指南
(12:06)开发者可以在项目里创建 TRANSLATION.md 文件,给智能体提供翻译指导。内容包括:
- 特定词汇的强制翻译(如术语表 glossary)
- 不应翻译的词汇列表(产品名、商标)
- 期望的语气风格描述
智能体默认使用 Xcode 内置的语言专用风格指南,同时会读取开发者提供的额外指导。把翻译指导单独放在 TRANSLATION.md 里,可以避免非翻译任务时加载无关上下文。
模型选择建议
(13:02)翻译是复杂的长时任务,需要确保术语在整个项目里保持一致。建议选择上下文窗口大、擅长处理长时间请求的大模型。不同模型对不同语言的翻译质量也有差异,某些语言在训练数据中出现频率较低,翻译质量可能打折扣,建议参考模型提供商的文档了解训练数据的语言分布。
核心启发
做一个多语言旅游导览 App
- 做什么:做一个介绍世界各地景点的 App,支持 10+ 语言
- 为什么值得做:利用 Xcode 智能体翻译,一个人就能完成原本需要外包团队的多语言本地化。String Catalogs 自动收集景点名称、描述等字符串的上下文,翻译准确率远超普通机翻
- 怎么开始:用 SwiftUI 写界面,确保所有字符串都通过
Text或String(localized:)声明。在 Xcode 里唤起智能体,选择目标语言,等翻译完成后用智能体检查各语言下的 UI 截断问题
做一个术语一致性检查工具
- 做什么:在大型项目里,不同开发者可能把同一个英文词翻译成不同的中文词。做一个脚本扫描 XLIFF 文件,找出同一个
source对应多个不同target的情况 - 为什么值得做:智能体虽然能利用上下文保持一致,但跨模块或跨时间开发的字符串仍可能不一致。这个工具可以作为 CI 的一环,在合并前自动检查
- 怎么开始:解析导出的 XLIFF,按
source分组,统计每个source对应的target数量,超过 1 个就报警
做一个「翻译质量评分」快捷指令
- 做什么:用 TestFlight 收集母语用户的截图反馈后,让智能体对比截图中的实际显示和 String Catalog 中的翻译,自动标记可能的问题(如截断、溢出、对齐错误)
- 为什么值得做:把人工审查翻译的工作流自动化,特别适合频繁更新内容的产品
- 怎么开始:用 Xcode 的智能体渲染各语言 UI 预览功能作为起点,把预览图和翻译文本一起喂给视觉模型做对比分析
做一个面向儿童的本地化词汇学习 App
- 做什么:儿童 App 的语气和用词跟成人 App 完全不同。做一个需要大量本地化且对语气敏感的教育类 App
- 为什么值得做:在
TRANSLATION.md里详细描述「用简单词汇、友好语气、避免抽象概念」,智能体会据此调整翻译风格。这是传统机翻做不到的事 - 怎么开始:先写一份详细的翻译风格指南,然后在 Xcode 里测试不同语言下的输出效果,迭代优化指南内容
关联 Session
- 101 Keynote — WWDC26 开场,可能涉及 AI 和智能体的整体战略
- 259 Xcode agents — Xcode 智能体的通用能力介绍,是本场翻译功能的基础平台
- 262 Swift — Swift 语言新特性,可能包含本地化相关 API 更新
- 344 Code-along: Explore localization with Xcode — 动手实践本地化的 Code-along 环节,补充本场理论内容
- 227 UI Prototypes with agents — 用智能体做 UI 原型,与本场用智能体渲染 UI 预览检查翻译的思路相通
评论
GitHub Issues · utterances