版权声明:本文为博主原创文章,未经博主允许不得转载。深圳夸克时代在线技术有限公司 官网:http://www.kksdapp.com https://blog.csdn.net/wahaha13168/article/details/82989147
1:在project info中的locations添加需要的语言
2:创建Localizable.strings文件 点击右边的localization勾选需要的语言
3:创建InfoPlist.strings翻译Info.plist中的提示文字和应用名称
4:创建LanguageHelper.swift
import UIKit
let UserLanguage = "UserLanguage"
let AppleLanguages = "AppleLanguages"
class LanguageHelper: NSObject {
static let shareInstance = LanguageHelper()
let def = UserDefaults.standard
var bundle : Bundle?
class func getString(key:String) -> String{
let bundle = LanguageHelper.shareInstance.bundle
let str = bundle?.localizedString(forKey: key, value: nil, table: nil)
return str!
}
func initUserLanguage() {
var string:String = def.value(forKey: UserLanguage) as! String? ?? ""
if string == "" {
let languages = def.object(forKey: AppleLanguages) as? NSArray
if languages?.count != 0 {
let current = languages?.object(at: 0) as? String
if current != nil {
string = current!
// def.set(current, forKey: UserLanguage)
// def.synchronize()
}
}
}
string = string.replacingOccurrences(of: "-CN", with: "")
string = string.replacingOccurrences(of: "-US", with: "")
var path = Bundle.main.path(forResource:string , ofType: "lproj")
if path == nil {
path = Bundle.main.path(forResource:"en" , ofType: "lproj")
}
bundle = Bundle(path: path!)
}
func setLanguage(langeuage:String) {
let path = Bundle.main.path(forResource:langeuage , ofType: "lproj")
bundle = Bundle(path: path!)
def.set(langeuage, forKey: UserLanguage)
def.synchronize()
}
}
5:在appdelegate中的
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
中初始化语言
LanguageHelper.shareInstance.initUserLanguage()
6:在设置里面增加按钮来切换语言
func changelangage2En() -> Void {
LanguageHelper.shareInstance.setLanguage(langeuage: "en")
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "LanguageChanged"), object: nil)
reStart()
}
func changelangage2Cn() -> Void {
LanguageHelper.shareInstance.setLanguage(langeuage: "zh-Hans")
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "LanguageChanged"), object: nil)
reStart()
}
7:切换之后重启应用
func reStart()->Void {
if let _ = UserService().currentUserSeed() {
self.navigationController = UINavigationController(rootViewController: HomeViewController(viewModel: HomeViewModel()))
} else {
self.navigationController = UINavigationController(rootViewController: WelcomeViewController())
}
DispatchQueue.main.async(execute: {
UIApplication.shared.keyWindow?.rootViewController = self.navigationController
})
}