swift應用內切換語言實現本地化
阿新 • • 發佈:2018-12-14
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 }) }