iOS - 語言國際化,手動切換語言

本人只是記錄下自己實現(xiàn)的過程, 大家可以參考:http://www.cnblogs.com/boai/p/5337558.html

或者:http://jingyan.baidu.com/article/fd8044fac8c0d55030137a4c.html


1.添加語言

在工程的info里面選擇添加語言


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

因為是手動切換,所以文件名不需要為Localizable.strings


文件名可以自己取 這里是Language.strings

3.創(chuàng)建完成之后選擇.strings文件, 點擊右側(cè)的Localization按鈕, 會彈出一個框, 選擇下拉框里的語言

勾選語言, Base可以勾選,也可以不勾選

然后會發(fā)現(xiàn).string文件會多出兩個文件,(English 和 Simplified)

4.在對應(yīng)的文件里面進行設(shè)置不同語言下要顯示的數(shù)據(jù)

格式為

"key" = "values";?
沒有@符號, 而且要用雙引號,不要忘記最后的分號

英語文件里面

漢語文件里面

兩個文件里面的values是最后顯示的數(shù)據(jù), key類似于字典里面的key, 兩個文件key值要一致, 不然顯示的時候數(shù)據(jù)會不是你想要的效果, 而且key值是唯一的,意味著不能重復(fù), 否則會報錯,鍵可以用中文,也可有用英文,性能有沒差別看不出



5。

寫個宏定義,用來讀取語言文件和返回的value值。宏最好是全局的,畢竟在一個項目里會有多個文件會用到。(pch文件或者其他文件)

#define Localized(key)? [[NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"appLanguage"]] ofType:@"lproj"]] localizedStringForKey:(key) value:nil table:“創(chuàng)建.strings的文件名”]

其中“appLanguage”是保存在本地的語言key,這里保存在了NSUserDefaults中,table是指創(chuàng)建的.strings文件名稱,這里是"Language",注意沒有".string"后綴

6 保存當(dāng)前使用語言到NSUserDefaults

在AppDelegate.m文件didFinishLaunchingWithOptions獲取當(dāng)前手機語言,并存儲到NSUserDefaults。

if (![[NSUserDefaults standardUserDefaults]objectForKey:@"appLanguage"]) {

NSArray *languages = [NSLocale preferredLanguages];

NSString *language = [languages objectAtIndex:0];

if ([language hasPrefix:@"zh-Hans"]) {//開頭匹配

[[NSUserDefaults standardUserDefaults] setObject:@"zh-Hans" forKey:@"appLanguage"];

}else{

[[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:@"appLanguage"];

}

}



7 ?切換語言的事件


在ViewController.m創(chuàng)建并初始化UILabel用于顯示多語言文字,UIButton切換語言按鈕及響應(yīng)事件。

//修改本地獲取的語言文件-交替

NSString *language = [[NSUserDefaults standardUserDefaults]objectForKey:@"appLanguage"];

if ([language isEqualToString: @"en"]) {

[[NSUserDefaults standardUserDefaults] setObject:@"zh-Hans" forKey:@"appLanguage"];

}else {

[[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:@"appLanguage"];

}

[[NSUserDefaults standardUserDefaults] synchronize];


8.因為切換語言之后要停留在當(dāng)前頁面,所以發(fā)送一個通知重新設(shè)置文字

[[NSNotificationCenter defaultCenter] postNotificationName:kLanguageChanged object:nil];

上面第二個語言是重新回到rootVc里面,相當(dāng)于重新初始化整個vc,所以不需要重新設(shè)置文字, 因為雖然我們選擇了語言, 但是只有在控件初始化的時候會讀取我們的語言文件, 所以要么是回到rootVc, 要么是自己重新設(shè)置文字(暫時不知道其他方法, 如果有人知道請告知。 謝謝), 在自己pop回去的上一個頁面里面接收通知,并設(shè)置文字, 但是如果是重新進入新的頁面,那該頁面不需要進行任何操作, 會自動切換語言

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

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

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