Swift 设置支持多语言

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

项目中的基础配置

  • 第一步

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

为了保证整个团队所使用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

你可能感兴趣的:(Swift 设置支持多语言)