swift5 - 多語言 設(shè)置

1. 新建 Localizable.strings文件

2. 添加語言

項目名 --> info --> 添加語言


此時Localizable.strings文件下會多出相應(yīng)語言的文件

3. 添加對應(yīng)語言變量

Localizable.strings(English)文件中添加語言變量,注意:末尾有分號!

title = "Hello!";  

Localizable.strings(Simplified)文件中添加語言變量,注意:末尾有分號泥技!

title = "你好!";  

4. 變量的使用

NSLocalizedString("topic", comment: "")

5. 切換語言

  • 在項目文件夾(finder中)可以看到對應(yīng)的語言文件神妹,如

    這就是我們切換語言時所需要獲取的文件
  • 獲取語言文件函數(shù)
// MARK: - 獲取 language bundle 文件  如 en.lproj
// 我也是剛學(xué)習(xí)颓哮,可能寫得不是很好家妆,僅提供相關(guān)思路鸵荠。
enum LanguageOptions: String {
    case english = "English"               // 英語
    case german = "Deutsche"                // 德語
    case chinese = "中文(簡體)"             // 中文(簡體)
    
    static func getFileName(title: String) -> String {
        switch title {
        case "English":
            return "en"
        case "Deutsche":
            return "de"
        case "中文(簡體)":
            return "zh-Hans"
        default:
            return "en"
        }
    }
}

extension Bundle {
    class func getLanguageBundle() -> Bundle? {
        // 根據(jù)用戶選擇的不同語言,獲取不同的語言的文件
       let language = LanguageOptions.getFileName(title: Defaults[.currentLanguage])

        let languageBundlePath = Bundle.main.path(forResource: language, ofType: "lproj")
        
        guard languageBundlePath != nil else {
            return nil
        }
        
        let languageBundle = Bundle.init(path: languageBundlePath!)
       
        guard languageBundle != nil else {
            return nil
        }
        
        return languageBundle!
    }
}
  • 獲取字符串
// MARK: - 根據(jù)語言文件 和 key 值獲取 相對應(yīng)的 字符串
class LanguageManager {
    static func localizedLanguage(key: String) -> String {
        let languageBundle = Bundle.getLanguageBundle() ?? Bundle.main
        return NSLocalizedString(key, tableName: "Localizable", bundle: languageBundle, value: "?", comment: "")
    }
}

// MARK: - 字符串?dāng)U展(簡化本地化寫法)
extension String {
    func localized() -> String {
        
        // 如果用戶未設(shè)置字體伤极,則使用系統(tǒng)默認(rèn)字體
        if Defaults[.currentLanguage] == "" {
            return NSLocalizedString(self, comment: "")
        }
        
        // 如果用戶設(shè)置過字體蛹找,則使用用戶選擇的字體
        return LanguageManager.localizedLanguage(key: self)
    }
}

此時,當(dāng)系統(tǒng)改變語言設(shè)置的時候(Defaults[.currentLanguage])哨坪,就可以通過 string.localized() 得到相應(yīng)語言的字符串庸疾。

  • 用戶點擊語言,切換到相應(yīng)的語言当编。
// 切換當(dāng)點擊的語言
Defaults[.currentLanguage] = languageOptions[indexPath.row]
// 顯示切換時的loading
LCProgressHUD.showLoading("language_setting_language".localized())
// 重啟整個應(yīng)用
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now()+1,
                                              execute: {
                                                LCProgressHUD.hide()
                                                UIView.animate(withDuration: 0.4, animations: {
                                                    UIApplication.shared.keyWindow?.alpha = 0
                                                }) { isFinished in
                                                    UIApplication.shared.keyWindow?.rootViewController = MainTabViewController()
                                                    UIView.animate(withDuration: 0.4, animations: {
                                                        UIApplication.shared.keyWindow?.alpha = 1
                                                    })
                                                }
                                            })

6. 使用方法

let label = UILabel()
// "title" 是前面 "Hello!"的變量名
label.text = "title".localized()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末届慈,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子忿偷,更是在濱河造成了極大的恐慌金顿,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鲤桥,死亡現(xiàn)場離奇詭異揍拆,居然都是意外死亡,警方通過查閱死者的電腦和手機茶凳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進(jìn)店門嫂拴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人贮喧,你說我怎么就攤上這事筒狠。” “怎么了箱沦?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵辩恼,是天一觀的道長。 經(jīng)常有香客問我饱普,道長运挫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任套耕,我火速辦了婚禮谁帕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘冯袍。我一直安慰自己匈挖,他們只是感情好碾牌,可當(dāng)我...
    茶點故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著儡循,像睡著了一般舶吗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上择膝,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天誓琼,我揣著相機與錄音,去河邊找鬼肴捉。 笑死腹侣,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的齿穗。 我是一名探鬼主播傲隶,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼窃页!你這毒婦竟也來了跺株?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤脖卖,失蹤者是張志新(化名)和其女友劉穎乒省,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胚嘲,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡作儿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了馋劈。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片攻锰。...
    茶點故事閱讀 39,745評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖妓雾,靈堂內(nèi)的尸體忽然破棺而出娶吞,到底是詐尸還是另有隱情,我是刑警寧澤械姻,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布妒蛇,位于F島的核電站,受9級特大地震影響楷拳,放射性物質(zhì)發(fā)生泄漏绣夺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一欢揖、第九天 我趴在偏房一處隱蔽的房頂上張望陶耍。 院中可真熱鬧,春花似錦她混、人聲如沸烈钞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽毯欣。三九已至馒过,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間酗钞,已是汗流浹背腹忽。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留算吩,地道東北人留凭。 一個月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像偎巢,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子兼耀,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,652評論 2 354

推薦閱讀更多精彩內(nèi)容