IOS 程序内切换语言

1,587 阅读1分钟

核心思想: 利用当前的bundle加载Localizable.string文件中的key,显示不同的value,然后将用户选择的语言存到本地,用于下次使用

1.首先创建本地localizable.string文件

2.在localizable.string文件内添加对应的标识文字

例如 

English 中填写

在Chinese中

3.创建一个语言管理类LanguageTool

添加初始化方法//MARK: 初始化语言(之前存过就用,没有就取系统的语言设置,并将存储为用户的偏好设置语言)

func initLanguage() {
       var saveLanguage = UserDefaults.standard.value(forKey: userLanguage)
        if saveLanguage == nil {//之前没有存储过语言
            //使用系统的
            saveLanguage = Locale.preferredLanguages.first as! String
            UserDefaults.standard.setValue(saveLanguage, forKey: userLanguage)
            UserDefaults.standard.synchronize()
        }
        let path = Bundle.main.path(forResource: saveLanguage as! String, ofType: "lproj")
        bundle = Bundle(path: path!)
        
    }

4.设置语言

   var setLanguage: String? {        didSet {            if let _ = setLanguage {                let path = Bundle.main.path(forResource: setLanguage, ofType: "lproj")                bundle = Bundle(path: path!)                UserDefaults.standard.setValue(setLanguage, forKey: userLanguage)                UserDefaults.standard.synchronize()                self.reset()            }        }    }

5.根据不同的key来显示不同的国家文字

 //MARK: 根据key来设置

func getstringByKey(key: String) -> String {        if ((self.bundle?.localizedString(forKey: key, value: nil, table: nil)) == nil) {            
            return Bundle.main.localizedString(forKey: key, value: nil, table: nil)        }        return (self.bundle?.localizedString(forKey: key, value: nil, table: nil))    }

6.都弄好了,就直接重新设置根控制器

func reset() {
        if let appdelegate = UIApplication.shared.delegate as? AppDelegate {
            let vc = MyTabbarViewController()
            appdelegate.window?.rootViewController = vc
            vc.selectedIndex = 0
        }    }

demo: gitee.com/sfmgit.com/…