123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- //
- // Languager.swift
- // icar
- //
- // Created by gongkai on 15/5/18.
- // Copyright (c) 2015年 anytracking. All rights reserved.
- //
- import UIKit
- private let kUserLanguage = "AppleLanguages"
- /**
- * 国际化工具
- */
- class Languager: NSObject {
- private struct Static {
- static var staticInstance : Languager? = nil
- }
- private var _currentLanguage:String?
-
- override init() {
- super.init()
- self.initLanguages()
- }
-
- //当前语言Bundle
- internal var currentLanguageBundle: Bundle?
-
-
- // 当前语言获取与切换
- var currentLanguage:String{
- get{
- if(self._currentLanguage==nil){
- self._currentLanguage = (UserDefaults.standard.array(forKey: kUserLanguage))?.first as? String
- //TODO 现在的语言带后缀的 不知道怎么处理 临时去掉后缀
- self._currentLanguage = self._currentLanguage?.replacingOccurrences(of: "-CN", with: "")
- self._currentLanguage = self._currentLanguage?.replacingOccurrences(of: "-US", with: "")
- if self._currentLanguage != "zh-HK" {
- self._currentLanguage = self._currentLanguage?.replacingOccurrences(of: "-HK", with: "")
- }
- self._currentLanguage = self._currentLanguage?.replacingOccurrences(of: "-HK", with: "")
- self._currentLanguage = self._currentLanguage?.replacingOccurrences(of: "-TW", with: "")
- }
- return self._currentLanguage!
- }
- set(newLanguage){
- if(self._currentLanguage == newLanguage){
- return
- }
- if let path = Bundle.main.path(forResource:newLanguage, ofType: "lproj"), let bundel = Bundle(path: path){
- self.currentLanguageBundle = bundel
- self._currentLanguage = newLanguage
- }else{
- //如果不支持当前语言则加载info中Localization native development region中的值的lporj
- let defaultLanguage = "zh-Hans"
- self.currentLanguageBundle = Bundle(path: Bundle.main.path(forResource: defaultLanguage, ofType: "lproj" )!)
- self._currentLanguage = defaultLanguage
- }
- let def = UserDefaults.standard
- def.setValue([self._currentLanguage!], forKey:kUserLanguage)
- def.synchronize()
-
- Bundle.main.onLanguage()
- }
- }
-
- // 单列
- class func standardLanguager() -> Languager{
- DispatchQueue.once(token: "standardLanguager") {
- Static.staticInstance = Languager()
- }
- return Static.staticInstance!
- }
-
- //初始化
- func initLanguages(){
- var language = (UserDefaults.standard.array(forKey: kUserLanguage))?.first as? String
- //TODO 现在的语言带后缀的 不知道怎么处理 临时去掉后缀
- language = language?.replacingOccurrences(of: "-CN", with: "")
- language = language?.replacingOccurrences(of: "-US", with: "")
- if language != "zh-HK" {
- language = language?.replacingOccurrences(of: "-HK", with: "")
- }
- language = language?.replacingOccurrences(of: "-TW", with: "")
- if let path = Bundle.main.path(forResource: language, ofType: "lproj" ), let bundel = Bundle(path: path){
- self.currentLanguageBundle = bundel
- self._currentLanguage = language
- }else{
- //如果不支持当前语言则加载info中Localization native development region中的值的lporj,设置为当前语言
- self.currentLanguage = "zh-Hans"
- print("Languager:\(String(describing: language))不支持,切换成默认语言\(self._currentLanguage!)")
- }
- }
-
- /**
- 获取当前语言的storyboard
- */
- func storyboard(name:String)-> UIStoryboard{
- return UIStoryboard(name: name, bundle: self.currentLanguageBundle)
- }
-
- /**
- 获取当前语言的nib
- */
- func nib(name:String)->UINib{
- return UINib(nibName: name, bundle: self.currentLanguageBundle)
- }
-
- /**
- 获取当前语言的string
- */
- func string(key:String)->String{
- if let str = self.currentLanguageBundle?.localizedString(forKey: key, value: nil, table: nil) {
- return str
- }
- return key
- }
-
- /**
- 获取当前语言的image
- */
- func image(name:String)->UIImage?{
- let path = self.currentLanguageBundle?.path(forResource: name+"@2x", ofType: "png")
- return UIImage(contentsOfFile: path!)
- }
- }
- func localized(key:String)->String{
- return Languager.standardLanguager().string(key: key)
- }
- func localizedImage(key:String)->UIImage?{
- return Languager.standardLanguager().image(name: key)
- }
|