Swift 设置支持多语言
2021-04-01 本文已影响0人
coder小鹏
在项目开发的过程中,难免会遇到多语言适配的问题,特此在这里总结一下在项目中如何进行多语言的适配,具体步骤如下:
项目中的基础配置
- 第一步
在
Xcode里面创建一个名叫Localizable.strings的文件来存储Key-Value信息。
截屏2021-04-01 下午2.23.51.png
- 第二步
在
Project的info里添加所需要支持的语言,这里选择的是Chinese(Simplified)和English-Development Language,会让你勾选语言适配方式,点击Finish。
截屏2021-04-01 下午2.28.40.png
截屏2021-04-01 下午2.28.55.png
- 第三步
添加完成后,可以看到在
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"命令。
截屏2021-04-01 下午3.31.03.png
这里要注意,由于我们自己的源代码会使用到
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
截屏2021-04-01 下午2.23.51.png