iOS 国际化与本地化
本文主要记录了 Xcode 项目关于本地化的一些操作
- 项目设置多语言,创建本地化文件
- 文本设置多语言( 含Xcode 15 之后新方法)
- 图片,音视频资源的本地化
- Info.plist 的多语言
- widget extension 配置的多语言设置
- storyboard/xib 的多语言设置
- 本地化日期、时间和数字
- 测试本地化
- 制作 pod 库实现多语言(文本 & 图片)
- SPM 的多语言配置
基本概念
国际化(Internationalization)和本地化(Localization)是指使应用能够支持多种语言和区域设置的过程.
国际化(简称 i18n)是指使应用能够适应不同语言和区域设置的准备工作.
本地化(简称 l10n)则是指针对特定语言和区域对应用进行适配.
本地化的具体操作
1. 创建本地化文件
在 Xcode 中,选择项目文件,然后选择目标。在 Info
选项卡中,找到 Localizations
部分,点击 +
号添加新的语言。
2. 本地化字符串
Xcode 15 之前可以使用
Localizable.strings
文件, 新建 String fileXcode 15 之后新增了
Localizable.xcstrings
文件, 新建 String Catalog
将应用中的字符串抽取到 Localizable.strings 文件中。以下是一个示例:
1
2
3
4
5
// Localizable.strings (English)
"hello" = "Hello";
// Localizable.strings (Spanish)
"hello" = "Hola";
使用 NSLocalizedString 函数来引用这些字符串
1
2
3
4
5
// 当我们创建的多语言文件名为 Localizable.strings
let hello = NSLocalizedString("hello", comment: "Greeting message")
// 如果我们创建的文件名是自定义, 需要指定表名
let hello = NSLocalizedString("hello", tableName: "MyLocalizable", comment: "")
3. 图片,音视频资源的本地化
图片
- 打开 Assets.xcassets,选择需要本地化的图片资源。
- 在属性检查器中,点击 + 号添加语言变体。例如,为英文和西班牙语添加不同的图片。
- 拖拽相应语言的图片到资源库中
音视频资源
- 打开指定的资源文件, 选中
- 在文件检查器中, Localization 选项下设置其支持的不同语言
- 拖拽相应的资源文件到指定的文件内容中
4. Info.plist 的多语言
- 打开指定的资源文件, 选中
- 在文件检查器中, Localization 选项下设置其支持的不同语言
- 拖拽相应的资源文件到指定的文件内容中
5. widget extension 配置的多语言设置
- 打开指定的资源文件, 选中
- 在文件检查器中, Localization 选项下设置其支持的不同语言
- 拖拽相应的资源文件到指定的文件内容中
6. storyboard/xib 的多语言设置
- 打开指定的资源文件, 选中
- 在文件检查器中, Localization 选项下设置其支持的不同语言
- 根据选择多语言类型设置, 如果选择多语言文件则直接编辑生成的文件, 如果选择 Localization.strings 则支持多种翻译的语言
7. 本地化日期、时间和数字
使用 DateFormatter, NumberFormatter 等系统提供的类来处理日期、时间和数字的格式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import SwiftUI
struct ContentView: View {
var body: some View {
VStack {
Text(NSLocalizedString("greeting", comment: "Greeting message"))
.padding()
// 日期和时间格式化
Text(dateString())
.padding()
// 数字格式化
Text(numberString())
.padding()
}
}
func dateString() -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .long
dateFormatter.timeStyle = .short
return dateFormatter.string(from: Date())
}
func numberString() -> String {
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .currency
return numberFormatter.string(from: 12345.67) ?? ""
}
}
8. 测试本地化
在模拟器或设备上测试:通过更改设备或模拟器的语言设置来测试不同语言的显示效果。
在 Xcode 中测试:在 Xcode 中选择 Scheme 编辑器,然后在 Options 标签中更改 Application Language 设置来预览不同语言的效果。
9. 制作 pod 库实现多语言(文本 & 图片)
10. SPM 的多语言配置
THE END.
本文由作者按照 CC BY 4.0 进行授权