-
使用 Xcode 中的智能体翻译你的 App
了解 Xcode 和编码智能体如何根据 App 的情境帮助你翻译字符串目录。我们将介绍审核翻译输出和迭代本地化的策略,以便你为全球用户提供量身定制的体验。
章节
- 0:00 - Introduction
- 1:49 - Add translations
- 8:11 - Review and iterate
- 11:02 - Best practices
资源
相关视频
WWDC26
WWDC25
WWDC24
WWDC22
Tech Talks
-
搜索此视频…
你好! 我是Avery 是本地化 团队的工程师 今天我想和你聊聊 如何翻译你的App 使用Xcode中的智能体 当你将App 本地化成其他语言时 你就能让全球 数百万更多用户使用你的App 这就是Apple一直以来 努力让App本地化 尽可能简单的原因 过去 传统的机器学习模型 在以下方面举步维艰 软件本地化的诸多方面 现代大语言模型 解决了其中一些问题 在通用翻译方面 表现优异 但在软件本地化方面 仍可能力不从心 尤其是缺乏正确 上下文的情况下 例如 以"book"这个词为例 它是指一本可以阅读的书吗 还是指预订酒店 房间的行为
这些词在英语中看起来相同 但在其他语言中 翻译却截然不同! 没有更多上下文 可能会选择错误的翻译 这可能会造成误导 好消息是 Xcode一直在 积累你的字符串的上下文 自String Catalogs引入以来! 两年前 String Catalogs开始追踪 代码中字符串的使用位置 去年 它们开始追踪 字符串的使用方式 从而自动生成 描述性注释 今年 我们很高兴 将所有这些上下文整合在一起! 从Xcode 27开始 你可以直接在Xcode中 使用代码智能体翻译字符串! 我将展示如何 为你的App添加翻译 一些审查和迭代 翻译的技巧 以及充分发挥这些功能 的最佳实践 我们开始吧!
我一直在开发一款App 它能帮我了解 世界各地不同的地标 我也希望让全球用户 都能使用这款App! 由于我在加拿大长大 我们从加拿大法语开始 我使用的是SwiftUI 这意味着 App界面已支持本地化 例如 我使用了 Text和Button等API 它们会自动公开 其字符串以供本地化 我现在可以开始翻译了 我会让智能体将App 翻译成加拿大法语 使用Xcode工具栏中的 新建对话按钮
如此一来 智能体和Xcode开始协作 逐步翻译我的字符串 智能体首先指示Xcode 为本地化准备项目
Xcode首先将该语言 添加到项目设置中 在我们的例子中是加拿大法语 然后 Xcode为所有支持的 平台构建所有目标 这对于确保 项目中所有可本地化字符串 都能被正确发现至关重要 最后 所有新发现的字符串 都会添加到String Catalogs 如果项目中还没有 任何String Catalogs Xcode会自动创建 默认情况下 字符串会添加到 名为Localizable的字符串目录 当然 你也可以使用自定义 表名来整理字符串 例如 使用 表名Greetings 会自动将字符串放入 名为Greetings的字符串目录 看来Xcode已完成 项目准备工作 查看左侧导航器 我可以看到四个 全新的String Catalogs 太好了! 接下来 智能体会选择 需要翻译的字符串 在我的例子中 我让它 翻译整个项目 所以它读取了 所有四个String Catalogs 终于 真正的工作可以开始了! 智能体将字符串 拆分成多个批次 将翻译工作委托给 各个子智能体 Xcode为子智能体提供 每个待翻译字符串的上下文 这可以包括字符串 在代码中的使用位置等信息 或使用相似术语 的字符串列表 甚至可以参考该字符串 在其他语言中的翻译! 让我们看看 右侧的String Catalog 了解子智能体在翻译 "%lld items"时做了什么 占位符%lld在运行时 将被替换为数字 该字符串按复数形式变化 在英语中 即"one item" 或"two items" 子智能体也对这个字符串 在加拿大法语中进行了变化 使其能表达"un élément" 或"deux éléments" 其他语言的复数变化方式 不同 形式或多或少 Xcode确保子智能体始终 知晓所需的变化形式 无论是哪种语言 子智能体还有很多 字符串需要翻译 我先去休息一下 吃点零食
好了! 看来子智能体在我吃完 零食之前就完成了任务
我们来看看用加拿大法语 运行App的效果
我会在工具栏中选择方案 编辑方案 选择Run 然后导航到Options 在这里 我可以将App语言 更改为加拿大法语进行调试 现在我将构建并运行App 看起来很棒 très bien! 我走在正确的轨道上 让更多人使用我的App 遍及全世界 现在 App目前 使用的是"lieux d'intérêt" 作为"landmarks"的 加拿大法语翻译 这是一个很好的 易于理解的翻译! 然而 由于我从小学习 加拿大法语 我有一些风格上的想法 能让我的App 翻译更加出彩 术语"attraits"或"attractions" 常被加拿大 旅游业使用 方式类似于我在App中 使用"landmarks"一词 我喜欢使用这个 更加轻松随意的术语 尤其因为它对讲法语的 加拿大人非常熟悉 为了增添一点魅力 我将把App名称改为 "Attraits phares" 即"旗舰景点" 做出这些更改同样简单 就像添加原始翻译 一样简单! 我会让智能体 进行这些调整 过几分钟再来查看
太好了! 查看右侧 一些String Catalogs 我可以看到智能体找到了 所有相关字符串 并更新了它们的翻译 比如App名称 以及"Draw a sketch of this landmark" 到目前为止 我介绍了 如何轻松开始第一次翻译 然而 将翻译纳入 工作流程同样简单 在向已本地化的App 添加新功能时 事实上 我刚好有 另一个想添加的功能创意 我们来构建并本地化它! 由于这是一项新功能 我将开始新的对话
我让智能体添加 并在精选地标下方 本地化一个有趣的标签 挑战用户发现App中 所有地标 功能构建完成后 智能体将把它 翻译成加拿大法语 看来全部完成了 查看右侧的 String Catalogs 智能体为新字符串 添加了复数变化形式 包括英语和加拿大法语 加拿大法语字符串 正确使用了"attraits" 作为"landmarks"的翻译 这真的很厉害! 在没有阅读我之前对话的情况下 在构建一个全新功能时 Xcode引导智能体发现了 并重用了地标的翻译 这是它默认不会选择的翻译 正是这种一致性 让App在加拿大法语版本中 更加融洽统一!
既然我已经有了 一些翻译 我想介绍一些 审查技巧 以及迭代本地化字符串的方法 向项目添加翻译 只是工作的一部分 确保以下几点很重要 所有内容在运行时 都能按预期运行 在其他语言中 不同语言 有不同的特点 例如 加拿大法语句子 平均而言 比英语对应句子更长 由于我刚将新功能 翻译成了加拿大法语 我应该确保所有文本 仍然适合App的界面 不会被截断 我会让代码智能体以 加拿大法语渲染新功能的界面 并查找截断问题
看看右侧的预览 看来它发现了一个问题! 我新功能的文本被截断了 在句子结尾之前 从这里 我可以调查 看看这是否只是 我实现中的一个Bug 界面是否需要重新设计 以适应更长的文本 或者是否应该请 模型提供更短的翻译 我稍后再把它加入待办清单 你可以使用这种技术检查 可能出现的各种问题 在不同语言中 包括泰语等高字符语言 的文本垂直裁切 或阿拉伯语等从右到左 语言的视图对齐问题 这种紧密的反馈循环 非常有帮助 在开发功能时 发现并修复问题 要了解更多关于解决 文本布局问题的技术和API 格式化等方面的内容 请观看《Build multilingual-ready apps》 以及《Get it right (to left)》 除了从代码智能体 获取反馈之外 从其他来源获取反馈 同样非常重要 作为开发者 我们最大的优势之一 在使用智能体编程时 是我们理解代码 这意味着我们能判断智能体 产出的代码是否符合需求 是否遗漏了一些细节 或者是否走错了方向 当使用智能体时 这种优势就消失了 将字符串翻译成 我们不擅长的语言 这正是TestFlight 等工具大放异彩的地方 就像你会请人测试 令人兴奋的新功能 在App Store发布之前 你也应该请母语用户 测试你的App 使用你正在添加的语言 通过TestFlight 用户可以轻松 分享包含建议的反馈 或本地化问题的截图 以便在向公众发布 本地化版本之前解决这些问题 例如 我之前更改了 地标的翻译 因为我会讲加拿大法语 但TestFlight是 我接收类似建议的好地方 对于其他语言! 要了解更多关于 使用TestFlight收集App反馈 请观看技术讲座 《Get Started with TestFlight》 在结束之前 我想介绍一些技巧 和最佳实践 可以充分利用这些功能 充分发挥 Xcode翻译功能的优势 拥有一款本地化良好的App 意味着所有面向用户的字符串 都应该翻译 当然 这只有在你的 面向用户字符串可本地化时才能实现!
正如我在开始时提到的 SwiftUI代码 默认情况下是可本地化的 在其余代码中 你可能需要 使用String(localized:) 或其他API来确保 字符串是可本地化的 有关可用于本地化的 API的更多详细信息 请查看《Code-along: Explore localization with Xcode》 确保所有字符串 都可本地化之后 请考虑你的App 面向的受众 例如 银行App可能使用 截然不同的风格和术语 与儿童App截然不同 默认情况下 智能体 可访问Apple的翻译专业知识 使用Xcode内置的 特定语言风格指南 不过 它们也会尊重 你提供的任何翻译指导 例如 你可以编写一份词汇表 包含你希望用于 特定词汇的翻译 或一份始终保持 不翻译的词汇列表 如产品名称或商标 甚至是你希望App 使用的语气的纯文本描述 要提供这些指导 你可以在AGENTS.md文件中 添加一个关于翻译的章节 或者项目中已有的 任何其他类似文件 为避免在执行非翻译任务时 加载这些额外上下文 我们建议单独引用 名为TRANSLATION.md的文件 在其中写入 所有翻译指导内容 智能体只应选择 在需要时读取该文档 处理翻译相关任务时 除翻译指导之外 还有一些其他事项需要考虑 翻译一款App是一项 复杂而漫长的任务 尤其是确保翻译 使用一致的术语时 贯穿整个项目 在考虑使用哪种模型时 可考虑使用具有 大型上下文窗口的模型 擅长完成 长时间请求的模型 因为这类模型 最适合翻译工作 同样值得注意的是 某些语言在训练数据中 出现的频率低于其他语言 大多数模型使用的训练数据 这可能导致智能体产生 这些语言 质量较低的翻译 某些特定模型 在翻译某些语言时 可能表现更好或更差 请查阅模型提供商的文档 了解更多关于其训练数据 中语言分布的信息 最后 如果你正在处理 从Xcode导出的本地化文件 你可以检查 leveraged-mt状态限定符 以了解哪些翻译 是由智能体提供的 我鼓励你 自行探索翻译你的App 使用Xcode中的智能体 尝试让智能体将你的App 翻译成一种新语言 或者添加一个新功能 并将其翻译成 App已支持的语言 有了翻译之后 使用Xcode中的 各种智能体工具 帮助你发现 并修复本地化问题 并使用TestFlight等工具 从母语用户处收集反馈 当你知道 需要在哪里改进时 可以考虑为智能体 提供额外的翻译指导 以确保所有翻译 日后都能保持高质量 最后 如果你还没有 请观看《Xcode, agents, and you》 了解你在Xcode中使用 智能体能做的其他精彩内容 感谢你的观看 希望这些新的翻译功能 能帮助你的App 触达全球更多用户 À bientôt!
-
-
3:02 - Localizing strings in SwiftUI
// Localizing strings in SwiftUI Text("Hello, world!", comment: "A standard greeting") -
3:11 - Localizing strings in SwiftUI with custom table name
// Localizing strings in SwiftUI with custom table name Text("Hello, world!", tableName: "Greetings", comment: "A standard greeting") -
11:21 - Localizing strings in SwiftUI
// Localizing strings in SwiftUI Text("Hello, world!", comment: "A standard greeting") -
11:25 - Localizing strings elsewhere
// Localizing strings elsewhere String(localized: "Hello, world!", comment: "A standard greeting") LocalizedStringResource("Hello World!", bundle: #bundle, comment: "A standard greeting") -
13:39 - Field for machine-translated strings in the XLIFF
// Field for machine-translated strings in the 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>
-
-
- 0:00 - Introduction
Translate your app using agents in Xcode. Xcode considers the context of strings used in your app and includes that in the feed to translation agents.
- 1:49 - Add translations
Ask an agent to translate your app, then watch as Xcode prepares the project, builds all targets to discover strings, and populates translated String Catalogs.
- 8:11 - Review and iterate
See how to review the outcome of translations, identify UI truncation issues, and iterate on the localization of your app.
- 11:02 - Best practices
Ensure user-facing strings are localizable and help guide translation agents with glossaries or custom terminology rules.