文章

iOS 国际化与本地化

本文主要记录了 Xcode 项目关于本地化的一些操作

  1. 项目设置多语言,创建本地化文件
  2. 文本设置多语言( 含Xcode 15 之后新方法)
  3. 图片,音视频资源的本地化
  4. Info.plist 的多语言
  5. widget extension 配置的多语言设置
  6. storyboard/xib 的多语言设置
  7. 本地化日期、时间和数字
  8. 测试本地化
  9. 制作 pod 库实现多语言(文本 & 图片)
  10. SPM 的多语言配置

基本概念

国际化(Internationalization)和本地化(Localization)是指使应用能够支持多种语言和区域设置的过程.

国际化(简称 i18n)是指使应用能够适应不同语言和区域设置的准备工作.

本地化(简称 l10n)则是指针对特定语言和区域对应用进行适配.

本地化的具体操作

1. 创建本地化文件

在 Xcode 中,选择项目文件,然后选择目标。在 Info 选项卡中,找到 Localizations 部分,点击 + 号添加新的语言。

2. 本地化字符串

Xcode 15 之前可以使用 Localizable.strings 文件, 新建 String file

Xcode 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. 图片,音视频资源的本地化

图片

  1. 打开 Assets.xcassets,选择需要本地化的图片资源。
  2. 在属性检查器中,点击 + 号添加语言变体。例如,为英文和西班牙语添加不同的图片。
  3. 拖拽相应语言的图片到资源库中

音视频资源

  1. 打开指定的资源文件, 选中
  2. 在文件检查器中, Localization 选项下设置其支持的不同语言
  3. 拖拽相应的资源文件到指定的文件内容中

4. Info.plist 的多语言

  1. 打开指定的资源文件, 选中
  2. 在文件检查器中, Localization 选项下设置其支持的不同语言
  3. 拖拽相应的资源文件到指定的文件内容中

5. widget extension 配置的多语言设置

  1. 打开指定的资源文件, 选中
  2. 在文件检查器中, Localization 选项下设置其支持的不同语言
  3. 拖拽相应的资源文件到指定的文件内容中

6. storyboard/xib 的多语言设置

  1. 打开指定的资源文件, 选中
  2. 在文件检查器中, Localization 选项下设置其支持的不同语言
  3. 根据选择多语言类型设置, 如果选择多语言文件则直接编辑生成的文件, 如果选择 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 进行授权