概述
随着应用程序面向全球用户,本地化支持已成为必不可少的基础能力。一款好的全球化应用应当能够在不同的语言和地区无缝运行,这不仅能让您的产品覆盖更广泛的受众,还能为用户提供更原生、更友好的体验,从而全面提升客户满意度。

本地化(Localization)过程简单来说就是
- 提取应用中对应的面向用户的字符串文本或图片资源等内容
- 交给翻译人员,进行不同语言和地区的适配
- 最后将翻译好的内容重新导入应用
但如果你曾经在项目中维护过十几种语言的 .strings 文件,你一定知道那种传统模式下的「痛苦」:文件分散、条目重复、翻译遗漏、协作混乱等等等等......
有幸,苹果官方在 Xcode 15 推出的 String Catalog ,其目的就是为了解决传统模式下的这些痛点。
本文介绍的重点就是 Apple 推出的全新国际化管理机制------String Catalog。
了解 String Catalog
String Catalog (字符串目录)是 Apple 在 Xcode 15 中引入的一种全新的、集中化的本地化资源管理方式 ,用于简化项目汇总翻译管理的过程实现轻松本地化。它旨在取代传统的 .strings和 .stringsdict文件,并且最大的好处在于 Xcode 中提供一个统一的可视化界面来管理所有本地化字符串(包括复数形式和设备特定变体)
核心概念
String Catalog 对应的文件后缀是 .xcstrings。其本质是一个 JSON 文件 ,使其在版本控制系统(如 Git)中进行差异比较时,比旧的 .strings 文件更友好
.xcstrings 文件中包含的内容有:
- 所有语言的翻译 :无需再为每种语言维护多个独立的
.strings或.stringsdict文件 - 多种字符串类型 :支持常规字符串、复数变体 (如英语中 "1 apple" 和 "2 apples" 的区别)、以及设备特定变体 (如为 iPhone、iPad、Mac 提供不同的翻译)
- 上下文注释:支持为每个字符串键(Key)添加注释,帮助翻译者理解上下文,从而提供更准确的翻译。
优势与特性
- Xcode 为
xcstrings文件提供的可视化界面- 翻译进度显示:以百分比的形式展示每种语言的翻译完成度,用于快速识别未完成或需要更新的语种
- 智能筛选与排序 :支持根据状态、key、翻译、注释等条件进行快速或组合筛选与排序,用于快速定位所需条目
- 精细化内容管理 :可以直接修改各语言对应的翻译内容,并支持为每个条目补充注释(Commnet),为翻译人员提供关键上下文,翻译人员能理解具体含义并确保翻译准确性
- 状态控制 :提供各语言各条目当前状态(STALE、NEW、NEEDS REVIEW、Translated )的查看,并且支持手动设置每个变量的状态(当前仅支持 Don't Translate、NEEDS REVIEW、REVIEWED)
- 工程双向联动:支持从可视化编辑界面跳转到变量对应代码位置,也支持从代码快捷跳转到可视化界面中,方便代码的查阅与修改
- 智能自动管理
- 编译时自动提取 :在编译过程中(
syncing localizations) Xcode 会扫描代关键字,将对应类型的字符串自动提取到 String Catalog 中,无需手动维护条目(设置为 Manually 的条目除外) - 无缝语言扩展 :为项目新增一种语言时,Xcode 会自动在 Catalog 中为该语言创建列 (也支持在编辑界面中新增),并将其所有条目初始标记为 "需要翻译"。
- 变量的自动转换 :在代码中使用
String(localized: "Welcome, \(userName)")等包含变量的字符串时,变量(如(userName))对应的 C 类型的占位符(%@、%lld 等)会自动提取到 String Catalog 中并正确显示,翻译人员只需按目标语言的语序组织字符串即可。
- 编译时自动提取 :在编译过程中(
- 高效协作与集成
- 集中式管理 :将所有需要国际化的字符串都集中在一个可视化的文件中进行管理,告别了过往分散在多个
.strings与.stringsdict文件中的繁琐 - 设备异化支持:支持按照设备(iPhoen\iPad\iPod\Mac\Apple Watch\Apple TV\Apple Vision)定义不同的翻译版本,保证在各种设备中均能提供合适的显示文本
- 复数规则支持:内置对复数形式的处理支持,能够根据不同语言的复数规则(各国家规则不同,需要提前确认规则后再做处理,如英语的 "1 apple" 和 "2 apples")自动选择正确的字符串变体,无需开发者手动实现复杂逻辑
- 标准化支持:无缝支持 XLIFF 标准格式,方便与专业的本地化服务或翻译工具进行导入导出
- 快捷迁移 :支持从旧的
.strings和.stringsdict文件一键迁移至新的 String Catalog 格式
- 集中式管理 :将所有需要国际化的字符串都集中在一个可视化的文件中进行管理,告别了过往分散在多个
工作原理与编译机制
.strings和.stringsdict文件] D --> E[打包到App Bundle中] E --> F[用户运行应用] F --> G{运行时处理} subgraph G [运行时处理] G1[系统根据设备语言设置] G2[加载对应的.strings文件] G3[提供本地化文本] end G --> H[界面显示本地化内容]
具体来说:
-
字符串提取机制 :在项目的编译过程中存在
syncing localizations步骤,这个步骤的作用是扫描代码,自动提取以下内容- OC 中 :使用指定的宏定义
NSLocalizedSrting,(自定义实际内容为xxxBundle localizedStringForKey: value: table:) - Interface Builder或storyboard中,文本默认进行提取,Document 部分有一个localizer Hint,通过这个进行注释,会存在在一个Main(Strings) 的 catalog 中
- swiftUI ,文本相关的默认都会进行提取,例如
Text("Hello") - swift ,
LocalizedStringKey或String.LocalizationValue类型的字符串,例如String(localized: "Welcome")
- OC 中 :使用指定的宏定义
-
编译时处理 : 编译时,会扫描工程中所有的
.xstrings文件,并根据文件里面的内容生成对应语言的.stringdict与.strings文件并引入到工程中(所以本质工程还是使用 .strings 实现的多语言)

创建与使用指南
由于本质是.strings 实现的多语言,所以实际使用的无最低部署目标要求,仅对 Xcode 存在要求
在新项目中创建 String Catalog
- 在 Xcode 项目中,通过 File > New > File...(或快捷键 Cmd+N)打开新建文件对话框
- 选择 Strings Catalog 模板
- 输入文件名(默认使用 Localizable),然后点击创建
迁移现有项目
如果已有的项目已经在使用传统的 .strings和 .stringsdict文件,那也可以机器轻松迁移到 Strings Catalog (毕竟还是那句话,String Catalog 的本质还是 .strings和 .stringsdict)
- 在 Xcode 项目导航器中, 右键单击 现有的 .strings或 .stringsdict文件
- 从上下文菜单中选择 Migrate to String Catalog
- Xcode 会自动开始迁移过程。为了完成此过程,您可能需要 构建项目 (Cmd+B),Xcode 会在构建过程中收集项目中的字符串资源到 .xcstrings文件中。
添加新语言支持
在 String Catalog 编辑器中:
- 点击编辑器窗口底部的 + 按钮
- 从下拉列表中选择您要添加的语言
- 添加后,Xcode 会自动为所有字符串创建条目,并标记为"需要翻译"(
NEW)。
关于文件命名
-
如果是应用内使用的文本需要国际化:则默认的命名为
Localizable.xcstrings,如需其他自定义名称,则需要在调用时候传递对应的table -
如果是需要实现 info.plist 文件的多语言,则固定命名为
InfoPlist.xcstrings -
如果是 .storyboard ,则可以直接右击显示
Migrate to String Catalog即可自动生成