在项目开发的过程中,难免会遇到多语言适配的问题,特此在这里总结一下在项目中如何进行多语言的适配,具体步骤如下:
项目中的基础配置
- 第一步
在
截屏2021-04-01 下午2.23.51.pngXcode
里面创建一个名叫Localizable.strings
的文件来存储Key-Value
信息。
- 第二步
截屏2021-04-01 下午2.28.40.png 截屏2021-04-01 下午2.28.55.png在
Project
的info
里添加所需要支持的语言,这里选择的是Chinese(Simplified)
和English-Development Language
,会让你勾选语言适配方式,点击Finish
。
- 第三步
添加完成后,可以看到在
Localizable.strings
下多了一个Localizable.strings(Chinese,Simplified)
文件用于保存简体中文的文本信息。
- 第四步
现在可以在
Localizable.strings
里面添加下面的Key-Value
来让App
显示中文了。
当用户在
iOS
的Setting App
里面把语言选择为简体中文以后,App
里面的文本就会变为中文。
使用SwiftGen
管理多语言字符串
- 安装
SwiftGen
为了保证整个团队所使用
SwiftGen
的版本都保持一致,我们使用Cocoapods
来安装SwiftGen
。在Podfile
文件中添加Swift Pod
即可。
pod 'SwiftGen', '= 6.4.0', configurations: ['Debug']
- 在
Build Phases
里面添加Run SwiftGen
步骤,然后配置它执行"${PODS_ROOT}/SwiftGen/bin/swiftgen"
命令。
这里要注意,由于我们自己的源代码会使用到
SwiftGen
所生成的代码,因此必须把Run SwiftGen
步骤放在Compile Source
步骤之前。
- 创建
Strings.swift
文件,添加如下代码
internal enum L10n {
internal enum LoginModeList {
//手机号
internal static let phoneNumberMessage = L10n.tr("Localizable", "LoginModeList.phoneNumberMessage")
}
}
extension L10n {
private static func tr(_ table: String, _ key: String, _ args: CVarArg...) -> String {
let format = BundleToken.bundle.localizedString(forKey: key, value: nil, table: table)
return String(format: format, locale: Locale.current, arguments: args)
}
}
// swiftlint:disable convenience_type
private final class BundleToken {
static let bundle: Bundle = {
#if SWIFT_PACKAGE
return Bundle.module
#else
return Bundle(for: BundleToken.self)
#endif
}()
}
- 在
Localizable.strings(English)
中添加如下代码
"LoginModeList.phoneNumberMessage" = "phone number";
- 在
Localizable.strings(Chinese,Simplified)
中添加如下代码
"LoginModeList.phoneNumberMessage" = "手机号";
- 具体使用
let label = UILabel()
label.text = L10n.LoginModeList.phoneNumberMessage
网友评论