核心思想: 利用当前的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/…