WWDC Quick Look 💓 By SwiftGGTeam
Translate your app using agents in Xcode

Translate your app using agents in Xcode

观看原视频

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 的 TextButton 等 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 写界面,确保所有字符串都通过 TextString(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

评论

GitHub Issues · utterances