本地化多言语是啥?

在App项目中,通常开发者只是会支撑一种语音。比如中国大陆区的开发者,仅支撑汉语版。多言语的好处能够帮助运营适配各个国家的App名称,以及内容方便App进行出海前的准备工作。

咋装备呢?

1.增加装备

项目装备 -> “Info” -> “Localizations”区域下,能够看到工程默许只支撑英文,我们能够再增加中文言语。实际依据本身需求,进行增加。

Swift实现本地化多语言,咋操作?
2.点击Finsh增加装备
Swift实现本地化多语言,咋操作?
3.增加Localizable装备

在工程中,右键增加文件(New File…),挑选Resource下的Strings File文件类型,文件名界说为“Localizable.strings”

Localizable姓名必定不要瞎起,否则无法正常运用!

Swift实现本地化多语言,咋操作?
4.创立需求的言语类型
Swift实现本地化多语言,咋操作?
5.分别在英文和中文资源下,输入如下键值

;必定不能忘记了!

//中文资源里
"Welcome" = "欢迎你好";
//英文资源里
"Welcome" = "Welcome to Hello";

切换言语的话,咋装备呢?

1.创立一个单例类进行管理
import UIKit
enum LanguageType {
    case chinese,english,auto
}
class LocalizableManager: NSObject {  
    static func localValue(_ str:String) -> String {
        LocalizableManager.shared.localValue(str: str)
    } 
    static func setLanguage(_ type:LanguageType){
        LocalizableManager.shared.setLanguage(type)
    }
    //单例
    static let shared = LocalizableManager()
     private override init() {      }
    var bundle:Bundle = Bundle.main
    private func localValue(str:String) -> String{
        //table参数值传nil也是能够的,传nil体系就会默许为Localizable
        bundle.localizedString(forKey: str, value: nil, table: "Localizable")
    }
    /// 获取体系言语办法-->能够依据本身事务场景进行处理
    private func getCurrentLanguage() -> String {
        let preferredLang = NSLocale.preferredLanguages.first! as NSString
        switch String(describing: preferredLang) {
        case "en-US", "en-CN":
            return "en"//英文
        case "zh-Hans-US","zh-Hans-CN","zh-Hant-CN","zh-TW","zh-HK","zh-Hans":
            return "cn"//中文
        default:
            return "en"
        }
    }
    private func setLanguage(_ type:LanguageType){
        var typeStr = ""
        switch type {
        case .chinese:
            typeStr = "zh-Hans"
            UserDefaults.standard.setValue("zh-Hans", forKey: "language")
        case .english:
            typeStr = "en"
            UserDefaults.standard.setValue("en", forKey: "language")
        default:
            break
        }
        //回来项目中 en.lproj 文件的途径
        let path = Bundle.main.path(forResource: typeStr, ofType: "lproj")
        //用这个途径生成新的bundle
        bundle = Bundle(path: path!)!
        if type == .auto {
            //和体系言语共同
            bundle = Bundle.main
            UserDefaults.standard.removeObject(forKey: "language")
        }
        NotificationCenter.default.post(name: NSNotification.Name(rawValue: "languageChanged"), object: nil)
    }
}
2.在AppDelegate,获取设置的言语
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    if let languageType = UserDefaults.standard.value(forKey: "language"){
      print(languageType)
      let type = languageType as! String
      switch type {
      case "en":
        LocalizableManager.setLanguage(.english)
      case "zh-Hans":
        LocalizableManager.setLanguage(.chinese)
      default:
        break
      }
    }
    return true
  }
3.运用示例

增加切换的监听事情

NotificationCenter.default.addObserver(forName: NSNotification.Name(rawValue: "languageChanged"), object: nil, queue: nil) { (notification) in
    self.setUpdateUI()
}
func setUpdateUI(){
    //取值
    languageLabel.text = LocalizableManager.localValue("auto")
}
4.项目装备中切换语音
Swift实现本地化多语言,咋操作?

App姓名,怎么装备呢?

同理,还是需求创立一个 .String 的文件。姓名命名为 InfoPlist.strings 千万不要改成其他的姓名否则无效!

//中文装备:
"CFBundleDisplayName" = "姓名"
//英文文装备:
"CFBundleDisplayName" = "Name"