iOS - 多语言工具类
iOS App本地化,多语言工具类
// // LanguageManager.swift // InledcoLightSwift // // 语言工具类 // // Created by huang zhengguo on 2017/10/12. // Copyright © 2017年 huang zhengguo. All rights reserved. // import UIKit class LanguageManager { // 语言列表定义 enum LanguageFlag: String { case auto = "auto" // 自动,跟随系统 case english = "en" // 英文 case chinese = "zh-Hans" // 中文 } // 语言文件 static private let languageFile = "" // 用户保存标记 static private var languageFilePath: String? static private var bundle: Bundle? static private var currentLanguageFlag: LanguageFlag! = .auto static private let userLangDefineFlag: String = "USERLANGUAGEFLAG" /// 根据键获取对应语言文本 /// - parameter key: 键值 /// /// - returns: 键值对应的文本 class func getValueForKey(key: String) -> String { let language = LanguageFlag.chinese self.languageFilePath = Bundle.main.path(forResource: language.rawValue, ofType: "lproj") self.bundle = Bundle.init(path: self.languageFilePath!) if self.bundle != nil { return (self.bundle?.localizedString(forKey: key, value: nil, table: self.languageFile))! } return Bundle.main.localizedString(forKey: key, value: nil, table: self.languageFile) } /// 获取当前语言标记 /// /// - returns: 当前语言标记 static func getCurrentLanguageFlag() -> LanguageFlag! { let languageStr = UserDefaults.standard.object(forKey: self.userLangDefineFlag) as? String switch languageStr { case LanguageFlag.auto.rawValue?: return LanguageFlag.auto case LanguageFlag.english.rawValue?: return LanguageFlag.english case LanguageFlag.chinese.rawValue?: return LanguageFlag.chinese default: return LanguageFlag.auto } } /// 设置语言 /// - parameter language: 表示语言的枚举 /// /// - returns: void class func setLanguage(language: LanguageFlag!) -> Void { // 1.如果用户设置和当前设置相同,则直接返回 if language == self.currentLanguageFlag { return } // 2.如果不同,则设置新语言 if language.rawValue == LanguageFlag.auto.rawValue { // 如果选择的是自动,则删除用户的设置 UserDefaults.standard.removeObject(forKey: self.userLangDefineFlag) self.languageFilePath = nil self.bundle = nil } else { // 获取语言文件 self.languageFilePath = Bundle.main.path(forResource: language.rawValue, ofType: "lproj") self.bundle = Bundle.init(path: self.languageFilePath!) // 存储到本地 UserDefaults.standard.setValue(language.rawValue, forKey: self.userLangDefineFlag) } // 3.重新获取当前设置 self.currentLanguageFlag = self.getCurrentLanguageFlag() } }
自律 平静 思考 实践
浙公网安备 33010602011771号