iOS 國際化開發(fā) 之 多語言(APP內(nèi)切換)

前言

最近做了一個 意大利的 物流項目,要求支持中、英粱玲、意三種語言躬柬,在APP內(nèi)可以自由切換3種語言,在此記錄過程如下抽减。

一允青、APP內(nèi) 固定文本的多語言
    1. 添加語言項
    2. 創(chuàng)建strings file文件 勾選上面添加的所需要多個語言項
    3. 在創(chuàng)建好的各個語言的文件里面翻譯對應(yīng)的文本
    4. 添加 全局 的 切換APP 語言 宏
    5. AppDelegate 內(nèi) 程序啟動的 時候 判斷設(shè)置語言
    6. APP內(nèi) 切換語言的時候 修改本地字符串
    7.所有控件或者頁面 設(shè)置文本的時候  都用 宏去設(shè)置

二、APP 的名稱卵沉、權(quán)限描述颠锉、等基本信息的多語言
   1. 創(chuàng)建strings file文件  命名為 InfoPlist.strings文件
   2. 勾選所需要多個語言項,在創(chuàng)建好的各個語言的文件里面翻譯對應(yīng)的文本

一、APP內(nèi) 固定文本的多語言

1.添加語言項

添加語言項

點擊完成

2.創(chuàng)建strings file文件

創(chuàng)建strings file文件

隨便選擇一個你要添加的語言史汗,點擊Localize按鈕確定

3.勾選所添加語言項,創(chuàng)建語言文件琼掠,在不同的語言文件自己翻譯對應(yīng)文本

勾選語言

4.在PrefixHeader.pch 預(yù)編譯文件內(nèi) 添加 全局 的 切換APP 語言 宏

//************************** 切換APP 語言 宏 ***********************
#define KLanguage(key)  [[NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"appLanguage"]] ofType:@"lproj"]] localizedStringForKey:(key) value:nil table:@"Localizable"]

5.AppDelegate 內(nèi) 程序啟動的 時候 判斷設(shè)置語言,如果 APP內(nèi)沒有 設(shè)置語言的時候 判斷手機(jī)系統(tǒng)是什么語言

if (![[NSUserDefaults standardUserDefaults]objectForKey:@"appLanguage"]) {
        //獲得當(dāng)前語言
        NSArray *languages = [NSLocale preferredLanguages];
        NSString *language = [languages objectAtIndex:0];
        if([language hasPrefix:@"en"]){
            [[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:appLanguage];
        }else if([language hasPrefix:@"it"]){
            [[NSUserDefaults standardUserDefaults] setObject:@"it" forKey:appLanguage];
        }else{
            [[NSUserDefaults standardUserDefaults] setObject:@"zh-Hans" forKey:appLanguage];
        }
        [[NSUserDefaults standardUserDefaults]synchronize];
    }

6.APP內(nèi) 切換語言的時候 修改本地字符串

_changeView.selectSelectLanauageCallBack = ^(NSString * _Nonnull str) {
        if ([str isEqualToString:@"Italiano"]) {
            [[NSUserDefaults standardUserDefaults] setObject:@"it" forKey:@"appLanguage"];
        }else if ([str isEqualToString:@"中文"]){
            [[NSUserDefaults standardUserDefaults] setObject:@"zh-Hans" forKey:@"appLanguage"];
        }else if ([str isEqualToString:@"English"]){
            [[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:@"appLanguage"];
        }
        [weakSelf refreshLanguage];
    };

7.所有控件或者頁面 設(shè)置文本的時候 都用 宏去設(shè)置,例如:

_nameLab.text = KLanguage(@"注冊");
[_changeBtn setTitle:KLanguage(@"語言") forState:UIControlStateNormal];
_nameTF.placeholder = KLanguage(@"請輸入您的用戶名");

二停撞、APP 的名稱瓷蛙、權(quán)限描述、等基本信息的多語言

1.創(chuàng)建strings file文件 命名為 InfoPlist.strings文件

\color{red}{文件名不能修改,必須叫InfoPlist.strings}

2. 勾選所需要多個語言項,在創(chuàng)建好的各個語言的文件里面翻譯對應(yīng)的文本,字段的key 是系統(tǒng)固定的字符串怜森,具體字段名可以在info.plist文件里面能找到

勾選所需要多個語言項,翻譯文本

Tips:

1.如果 不是APP內(nèi)自由切換速挑,只是根據(jù)系統(tǒng)設(shè)置來切換谤牡,可以不用通過保存本地字符串的方法來判斷切換語言副硅,可以直接用NSLocalizedString(@"", nil)方法設(shè)置文本。

  1. 創(chuàng)建strings 文件的時候 如果命名 不是Localizable.strings翅萤,而是其它恐疲,比方說是Logistics.strings, 那么設(shè)置文本的時候 需要用NSLocalizedStringFromTable(@"key",@"Logistics", nil)方法。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末套么,一起剝皮案震驚了整個濱河市培己,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌胚泌,老刑警劉巖省咨,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異玷室,居然都是意外死亡零蓉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進(jìn)店門穷缤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來敌蜂,“玉大人,你說我怎么就攤上這事津肛≌潞恚” “怎么了?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長秸脱。 經(jīng)常有香客問我落包,道長,這世上最難降的妖魔是什么摊唇? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任妥色,我火速辦了婚禮,結(jié)果婚禮上遏片,老公的妹妹穿的比我還像新娘嘹害。我一直安慰自己,他們只是感情好吮便,可當(dāng)我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布笔呀。 她就那樣靜靜地躺著,像睡著了一般髓需。 火紅的嫁衣襯著肌膚如雪许师。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天僚匆,我揣著相機(jī)與錄音微渠,去河邊找鬼。 笑死咧擂,一個胖子當(dāng)著我的面吹牛逞盆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播松申,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼云芦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了贸桶?” 一聲冷哼從身側(cè)響起舅逸,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎皇筛,沒想到半個月后琉历,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡水醋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年旗笔,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片离例。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡换团,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出宫蛆,到底是詐尸還是另有隱情艘包,我是刑警寧澤的猛,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站想虎,受9級特大地震影響卦尊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜舌厨,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一岂却、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧裙椭,春花似錦躏哩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至炊汤,卻和暖如春正驻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背抢腐。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工姑曙, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人迈倍。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓伤靠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親授瘦。 傳聞我的和親對象是個殘疾皇子醋界,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,612評論 2 350

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