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() } }
自律 平静 思考 实践
分类:
iOS
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端