美文网首页
Swift 设置支持多语言

Swift 设置支持多语言

作者: coder小鹏 | 来源:发表于2021-04-01 15:49 被阅读0次

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

    项目中的基础配置

    • 第一步

    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 设置支持多语言

          本文链接:https://www.haomeiwen.com/subject/mbvtkltx.html