iOS-詳細(xì)介紹多語(yǔ)言

介紹說(shuō)明

App對(duì)于多語(yǔ)言這塊無(wú)非2種需求,一是軟件根據(jù)手機(jī)當(dāng)前操作系統(tǒng)的語(yǔ)言來(lái)顯示對(duì)應(yīng)的語(yǔ)言;另外一種是,不論當(dāng)前手機(jī)設(shè)置的是什么語(yǔ)言,用戶可以通過(guò)設(shè)置(點(diǎn)擊按鈕)改變當(dāng)前軟件的語(yǔ)言。

下面先介紹第一種,根據(jù)手機(jī)當(dāng)前操作系統(tǒng)的語(yǔ)言來(lái)顯示對(duì)應(yīng)的語(yǔ)言

1、在Xcode工程里面創(chuàng)建文件

屏幕快照 2017-06-02 上午10.30.48.png

2、添加多語(yǔ)言,在這里添加了簡(jiǎn)體中文和英語(yǔ)兩個(gè)版本

屏幕快照 2017-06-02 上午10.33.37.png
屏幕快照 2017-06-02 上午10.36.23.png

3、多語(yǔ)言的使用

分別在不同的語(yǔ)言文件中添加測(cè)試代碼

  1. "text" = "English text"; 
  2. "text" = "簡(jiǎn)體中文";

說(shuō)到使用,就要了解下NSLocalizedString是什么

 #define NSLocalizedString(key, comment) \
    [[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]
 #define NSLocalizedStringFromTable(key, tbl, comment) \
    [[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:(tbl)]
 #define NSLocalizedStringFromTableInBundle(key, tbl, bundle, comment) \
    [bundle localizedStringForKey:(key) value:@"" table:(tbl)]
#define NSLocalizedStringWithDefaultValue(key, tbl, bundle, val, comment) \
    [bundle localizedStringForKey:(key) value:(val) table:(tbl)]

其實(shí)就是宏,而宏定義的又是在資源文件中尋找對(duì)應(yīng)的資源文件;

 1. NSLocalizedString(key,comment)
 2. NSLocalizedStringFromTable(key, tbl, comment)

第一種適合于,讓?xiě)?yīng)用跟隨系統(tǒng)的語(yǔ)言版本進(jìn)行切換,而用戶卻不能手動(dòng)進(jìn)行切換;
注意:如果用第一個(gè)方法實(shí)現(xiàn)多語(yǔ)言,多語(yǔ)言的文件名必須是 Localizable
參數(shù)說(shuō)明:第一個(gè)參數(shù)是多語(yǔ)言文件中的key,第二個(gè)參數(shù)是對(duì)key的注釋說(shuō)明,一般為nil就可以了

如果要實(shí)現(xiàn)的是既可以跟隨系統(tǒng),又可以用戶自己切換,就不能使用第一種了,那就要使用第二種 NSLocalizedStringFromTable(key, tbl, comment) tbl這個(gè)參數(shù),就是我們自己命名的多語(yǔ)言文件名稱;
注:直接使用第二種的話,會(huì)跟隨系統(tǒng)語(yǔ)言
參數(shù)說(shuō)明:第一個(gè)參數(shù)是多語(yǔ)言文件中的key,第二個(gè)參數(shù)是多語(yǔ)言文件的名字,第三個(gè)參數(shù)是對(duì)key的注釋說(shuō)明,一般為nil就可以了

代碼中直接定義的Label控件就可以直接使用,實(shí)現(xiàn)語(yǔ)言根據(jù)系統(tǒng)的切換

 _label.text = NSLocalizedString(@"text", nil);

下面先介紹第二種,用戶可以設(shè)置語(yǔ)言

創(chuàng)建和上面的步驟一樣,不再一一列舉;主要看代碼實(shí)現(xiàn)邏輯;

 AppDelegate.h
 @interface AppDelegate : UIResponder <UIApplicationDelegate>
 @property (strong, nonatomic) UIWindow *window;
 //用來(lái)記錄選中的哪種語(yǔ)言
 @property(strong, nonatomic)NSString *languageName; 
//通過(guò)傳進(jìn)來(lái)的參數(shù)key,獲取相應(yīng)語(yǔ)言的文本
 -(NSString*)getLanguageName:(NSString*)languageKey;
@end

AppDelegate.m
//實(shí)現(xiàn)方法
-(NSString*)getLanguageName:(NSString *)languageKey
{
//獲取指定的語(yǔ)言文件的路徑
NSString *path = [[NSBundle       mainBundle]pathForResource:_languageName ofType:@"lproj"];
//在指定的路徑下獲取語(yǔ)言文件,并取出key所對(duì)應(yīng)的語(yǔ)言文本
NSString *textLanguage = [[NSBundle bundleWithPath:path]localizedStringForKey:languageKey value:nil table:@"Localizable"];
return textLanguage;
}

下面是實(shí)現(xiàn)類里面的代碼:

   //添加兩個(gè)button的監(jiān)聽(tīng)事件,手動(dòng)切換哪種語(yǔ)言
   -(void)clickEnglish
  {
   //賦值指定相應(yīng)的語(yǔ)言文件
   _appDelegate.languageName = @"en";
  //通過(guò)相應(yīng)的key,在指定的語(yǔ)言文件取出相應(yīng)的語(yǔ)言文本
   _label.text = [_appDelegate getLanguageName:@"text"];
  }

-(void)clickChinese
{
  _appDelegate.languageName = @"zh-Hans";
  _label.text = [_appDelegate getLanguageName:@"text"];
}

這里的@"en" @"zh-Hans"你可能會(huì)問(wèn),從哪來(lái)的?實(shí)際上當(dāng)你前面按照上面的配置好了以后,你的工程文件夾下面會(huì)有幾個(gè)文件夾。這樣就知道該寫(xiě)什么了吧?

屏幕快照 2017-06-02 下午2.02.57.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評(píng)論 19 139
  • linux資料總章2.1 1.0寫(xiě)的不好抱歉 但是2.0已經(jīng)改了很多 但是錯(cuò)誤還是無(wú)法避免 以后資料會(huì)慢慢更新 大...
    數(shù)據(jù)革命閱讀 13,230評(píng)論 2 33
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,679評(píng)論 18 399
  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語(yǔ)言,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲(chóng)de夢(mèng)閱讀 100,664評(píng)論 9 468
  • 倉(cāng)央嘉措披著袈裟走過(guò) 在傳世史詩(shī)里卿卿我我 任指尖如沙畫(huà)般堆砌成 留下千古絕唱任由評(píng)說(shuō) 倉(cāng)央嘉措沒(méi)有飛蛾撲火 他把...
    紅學(xué)磚家閱讀 467評(píng)論 3 20

友情鏈接更多精彩內(nèi)容