在項目開發(fā)的過程中,難免會遇到多語言適配的問題,特此在這里總結(jié)一下在項目中如何進(jìn)行多語言的適配,具體步驟如下:
項目中的基礎(chǔ)配置
- 第一步
在
Xcode里面創(chuàng)建一個名叫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)文件用于保存簡體中文的文本信息。
- 第四步
現(xiàn)在可以在
Localizable.strings里面添加下面的Key-Value來讓App顯示中文了。
當(dāng)用戶在
iOS的Setting App里面把語言選擇為簡體中文以后,App里面的文本就會變?yōu)橹形摹?/p>
使用SwiftGen管理多語言字符串
- 安裝
SwiftGen
為了保證整個團(tuán)隊所使用
SwiftGen的版本都保持一致,我們使用Cocoapods來安裝SwiftGen。在Podfile文件中添加Swift Pod即可。
pod 'SwiftGen', '= 6.4.0', configurations: ['Debug']
- 在
Build Phases里面添加Run SwiftGen步驟,然后配置它執(zhí)行"${PODS_ROOT}/SwiftGen/bin/swiftgen"命令。

截屏2021-04-01 下午3.31.03.png
這里要注意,由于我們自己的源代碼會使用到
SwiftGen所生成的代碼,因此必須把Run SwiftGen步驟放在Compile Source步驟之前。
- 創(chuàng)建
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
