1. 程式人生 > >swift3.0-iOS app內部語言國際化(本地化)

swift3.0-iOS app內部語言國際化(本地化)

1. 首先要配置localizable.strings,如下圖:

詳細的配置過程這裡就不說了,可以另行百度。今天主要說的是怎樣在內部切換語言環境。

2.  新建類:LanguageHelper.swift

程式碼中註釋已經很詳細了,這裡就不多說了。請看程式碼:

//
//  LanguageHelper.swift
//
//  Created by amberoot on 17/8/24.
//  Copyright  2017年 amberoot. All rights reserved.
//

import UIKit

class LanguageHelper: NSObject {
    //單例
    static let shareInstance = LanguageHelper()
    
    let def = UserDefaults.standard
    var bundle : Bundle?
    
    ///根據使用者設定的語言型別獲取字串
    func getUserStr(key: String) -> String
    {
         // 獲取本地化字串,字串根據手機系統語言自動切換
        let str = NSLocalizedString(key, comment: "default")
        return str
    }
    ///根據app內部設定的語言型別獲取字串
    func getAppStr(key: String) -> String
    {
        // 獲取本地化字串,字串會根據app系統語言自動切換
        let str = NSLocalizedString(key, tableName: "Localizable", bundle: LanguageHelper.shareInstance.bundle!, value: "default", comment: "default")
        return str
    }
    
    ///設定app語言環境
    func setLanguage(langeuage: String) {
        var str = langeuage
        //如果獲取不到系統語言,就把app語言設定為首選語言
        if langeuage == "" {
            //獲取系統首選語言順序
            let languages:[String] = UserDefaults.standard.object(forKey: "AppleLanguages") as! [String]
            let str2:String = languages[0]
            //如果首選語言是中文,則設定APP語言為中文,否則設定成英文
            if ((str2=="zh-Hans-CN")||(str2=="zh-Hans"))
            {
                str = "zh-Hans"
            }else
            {
                str="en"
            }
            
        }
        //語言設定
        def.set(str, forKey: "langeuage")
        def.synchronize()
        //根據str獲取語言資料(因為設定了本地化,所以專案中有en.lproj和zn-Hans.lproj)
        let path = Bundle.main.path(forResource:str , ofType: "lproj")
        bundle = Bundle(path: path!)
 
    
    }
}

3. LanguageHelper.swift的應用

(1)在AppDelegate.swift中設定app的初始語言

可以獲取手機系統語言來設定APP的初始語言環境,也可以根據自己的需求設定APP的初始語言環境。


(2)實際應用:配置label的text或button的title等等


參考部落格地址:http://www.zhimengzhe.com/bianchengjiaocheng/swift/337155.html