iOS國(guó)際化切換 for Swift

公司業(yè)務(wù)做到了國(guó)外,要做給印度尼西亞使用的APP,需要在APP內(nèi)部直接切換語(yǔ)言蜡吧,而不是根據(jù)系統(tǒng)語(yǔ)言而顯示不同的語(yǔ)言,經(jīng)過(guò)一番調(diào)研做了一個(gè)簡(jiǎn)單的Demo占键,分享學(xué)習(xí)成果的同時(shí)自己也做個(gè)總結(jié)昔善。

國(guó)際慣例先上效果圖

效果圖

準(zhǔn)備工作

  • command+N進(jìn)入創(chuàng)建new files菜單,選擇Strings File創(chuàng)建畔乙。


    第一步創(chuàng)建strings文件
  • 選擇創(chuàng)建好的Customer.strings后君仆,點(diǎn)擊localize


    第二步選擇Customer后,點(diǎn)擊localize
  • 這里點(diǎn)擊“+”創(chuàng)建需要的語(yǔ)言文件啸澡,這里筆者添加了4個(gè)袖订,分別是英語(yǔ)氮帐、簡(jiǎn)體中文嗅虏、繁體中文、印尼語(yǔ)上沐。


    點(diǎn)擊+添加所需要的語(yǔ)言

這里需要提醒一下皮服,如何查看國(guó)家對(duì)應(yīng)語(yǔ)言代碼,筆者在調(diào)研過(guò)程中各種搜索也無(wú)果参咙,后自己發(fā)現(xiàn) 添加語(yǔ)言時(shí)()里即為國(guó)家對(duì)應(yīng)語(yǔ)言代碼龄广,后面寫代碼時(shí)會(huì)用到,具體如下圖蕴侧。

()里為國(guó)家對(duì)應(yīng)語(yǔ)言代碼

  • 然后再次選擇Customer.strings把需要添加的語(yǔ)言進(jìn)行勾選


    勾選語(yǔ)言文件
  • 展開(kāi)Customer.strings可以看到剛剛添加的四個(gè)語(yǔ)言文件择同,其中showText是展示文字,iamge是圖片名稱净宵。

    語(yǔ)言文件

    之后分別在語(yǔ)言文件中填寫相同參數(shù)名的參數(shù)敲才,例子:

    CustomerLaction.strings(Chinese(Traditionnal))對(duì)應(yīng)
    "showText" = "這是壹個(gè)臺(tái)灣繁體";
    "image" = "zh-Hant";
    
    CustomerLaction.strings(English)對(duì)應(yīng)
    "showText" = "this is a English Text";
    "image" = "en";
    
    CustomerLaction.strings(Indonesian)對(duì)應(yīng)
    "showText" = "Ini adalah bahasa Indonesia.";
    "image" = "id";
    

代碼實(shí)現(xiàn)

創(chuàng)建CustomLanguage工具類裹纳,其中語(yǔ)言代碼如何查看上文已提到,如下:

class CustomLanguage: NSObject {
    //單例
    static let share = CustomLanguage()
    // 國(guó)家語(yǔ)言代碼
    var lan = ""
    
    func showText(key: String) -> String {
        // 查找對(duì)應(yīng)國(guó)家語(yǔ)言代碼的路徑
        guard let path = Bundle.main.path(forResource: lan, ofType: "lproj") else { return "" }
        // 通過(guò)路徑在CustomLacation語(yǔ)言文件中查找對(duì)應(yīng)key的字符串
        guard let bundle = Bundle(path: path)?.localizedString(forKey: key, value: nil, table: "CustomLacation") else { return "" }
        return bundle
    }
}

四個(gè)按鈕的點(diǎn)擊方法紧武,其中setAttributedWithImage方法是封裝的富文本類別剃氧,可在github中下載源碼查看。

@objc func englishBtnClick() {
    CustomLanguage.share.lan = "en"
    label.attributedText = CustomLanguage.share.showText(key: "showText").setAttributedWithImage(subText: CustomLanguage.share.showText(key: "showText"), subColor: #colorLiteral(red: 0.2196078449, green: 0.007843137719, blue: 0.8549019694, alpha: 1), image: UIImage(named: CustomLanguage.share.showText(key: "image"))!)
}


@objc func chineseSimpleBtnClick() {
    CustomLanguage.share.lan = "zh-Hans"
    label.attributedText = CustomLanguage.share.showText(key: "showText").setAttributedWithImage(subText: CustomLanguage.share.showText(key: "showText"), subColor: #colorLiteral(red: 0.9254902005, green: 0.2352941185, blue: 0.1019607857, alpha: 1), image: UIImage(named: CustomLanguage.share.showText(key: "image"))!)
}

@objc func chineseTWBtnClick() {
    CustomLanguage.share.lan = "zh-Hant"
    label.attributedText = CustomLanguage.share.showText(key: "showText").setAttributedWithImage(subText: CustomLanguage.share.showText(key: "showText"), subColor: #colorLiteral(red: 0.9254902005, green: 0.2352941185, blue: 0.1019607857, alpha: 1), image: UIImage(named: CustomLanguage.share.showText(key: "image"))!)
}

@objc func indonesiaBtnClick() {
    CustomLanguage.share.lan = "id"
    label.attributedText = CustomLanguage.share.showText(key: "showText").setAttributedWithImage(subText: CustomLanguage.share.showText(key: "showText"), subColor: #colorLiteral(red: 0.2745098174, green: 0.4862745106, blue: 0.1411764771, alpha: 1), image: UIImage(named: CustomLanguage.share.showText(key: "image"))!)
}

如果感興趣可以到我的github中下載源碼阻星,記得點(diǎn)擊Stars哈朋鞍,感謝。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末妥箕,一起剝皮案震驚了整個(gè)濱河市滥酥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌畦幢,老刑警劉巖恨狈,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異呛讲,居然都是意外死亡禾怠,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門贝搁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)吗氏,“玉大人,你說(shuō)我怎么就攤上這事雷逆∠曳恚” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵膀哲,是天一觀的道長(zhǎng)往产。 經(jīng)常有香客問(wèn)我,道長(zhǎng)某宪,這世上最難降的妖魔是什么仿村? 我笑而不...
    開(kāi)封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮兴喂,結(jié)果婚禮上蔼囊,老公的妹妹穿的比我還像新娘。我一直安慰自己衣迷,他們只是感情好畏鼓,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著壶谒,像睡著了一般云矫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上汗菜,一...
    開(kāi)封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天让禀,我揣著相機(jī)與錄音贵少,去河邊找鬼。 笑死堆缘,一個(gè)胖子當(dāng)著我的面吹牛滔灶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播吼肥,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼录平,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了缀皱?” 一聲冷哼從身側(cè)響起斗这,我...
    開(kāi)封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎啤斗,沒(méi)想到半個(gè)月后表箭,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡钮莲,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年免钻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片崔拥。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡极舔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出链瓦,到底是詐尸還是另有隱情拆魏,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布慈俯,位于F島的核電站渤刃,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏贴膘。R本人自食惡果不足惜卖子,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望步鉴。 院中可真熱鬧揪胃,春花似錦璃哟、人聲如沸氛琢。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)阳似。三九已至,卻和暖如春铐伴,著一層夾襖步出監(jiān)牢的瞬間撮奏,已是汗流浹背俏讹。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留畜吊,地道東北人泽疆。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像玲献,于是被迫代替她去往敵國(guó)和親殉疼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

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