Swift 设置支持多语言

2021-04-01  本文已影响0人  coder小鹏

在项目开发的过程中,难免会遇到多语言适配的问题,特此在这里总结一下在项目中如何进行多语言的适配,具体步骤如下:

项目中的基础配置

Xcode里面创建一个名叫Localizable.strings的文件来存储Key-Value信息。

截屏2021-04-01 下午2.23.51.png

Projectinfo里添加所需要支持的语言,这里选择的是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显示中文了。

当用户在iOSSetting App里面把语言选择为简体中文以后,App里面的文本就会变为中文。

使用SwiftGen管理多语言字符串

为了保证整个团队所使用SwiftGen的版本都保持一致,我们使用Cocoapods来安装SwiftGen。在Podfile文件中添加Swift Pod即可。

pod 'SwiftGen', '= 6.4.0', configurations: ['Debug']
截屏2021-04-01 下午3.31.03.png

这里要注意,由于我们自己的源代码会使用到 SwiftGen 所生成的代码,因此必须把 Run SwiftGen 步骤放在 Compile Source 步骤之前。

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
  }()
}
"LoginModeList.phoneNumberMessage" = "phone number";
"LoginModeList.phoneNumberMessage" = "手机号";
let label = UILabel()
label.text = L10n.LoginModeList.phoneNumberMessage
上一篇 下一篇

猜你喜欢

热点阅读