swift应用内切换语言实现本地化

版权声明:本文为博主原创文章,未经博主允许不得转载。深圳夸克时代在线技术有限公司 官网: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


        })


    }

猜你喜欢

转载自blog.csdn.net/wahaha13168/article/details/82989147