本人只是記錄下自己實現的過程, 大家可以參考:http://www.cnblogs.com/boai/p/5337558.html
或者:http://jingyan.baidu.com/article/fd8044fac8c0d55030137a4c.html
1.添加語言
在工程的info里面選擇添加語言
2.創建.strings文件
因為是手動切換,所以文件名不需要為Localizable.strings
文件名可以自己取 這里是Language.strings
3.創建完成之后選擇.strings文件, 點擊右側的Localization按鈕, 會彈出一個框, 選擇下拉框里的語言
勾選語言, Base可以勾選,也可以不勾選
然后會發現.string文件會多出兩個文件,(English 和 Simplified)
4.在對應的文件里面進行設置不同語言下要顯示的數據
格式為
"key" = "values";?
沒有@符號, 而且要用雙引號,不要忘記最后的分號
英語文件里面
漢語文件里面
兩個文件里面的values是最后顯示的數據, key類似于字典里面的key, 兩個文件key值要一致, 不然顯示的時候數據會不是你想要的效果, 而且key值是唯一的,意味著不能重復, 否則會報錯,鍵可以用中文,也可有用英文,性能有沒差別看不出
5。
寫個宏定義,用來讀取語言文件和返回的value值。宏最好是全局的,畢竟在一個項目里會有多個文件會用到。(pch文件或者其他文件)
#define Localized(key)? [[NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"appLanguage"]] ofType:@"lproj"]] localizedStringForKey:(key) value:nil table:“創建.strings的文件名”]
其中“appLanguage”是保存在本地的語言key,這里保存在了NSUserDefaults中,table是指創建的.strings文件名稱,這里是"Language",注意沒有".string"后綴
6 保存當前使用語言到NSUserDefaults
在AppDelegate.m文件didFinishLaunchingWithOptions獲取當前手機語言,并存儲到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創建并初始化UILabel用于顯示多語言文字,UIButton切換語言按鈕及響應事件。
//修改本地獲取的語言文件-交替
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.因為切換語言之后要停留在當前頁面,所以發送一個通知重新設置文字
[[NSNotificationCenter defaultCenter] postNotificationName:kLanguageChanged object:nil];
上面第二個語言是重新回到rootVc里面,相當于重新初始化整個vc,所以不需要重新設置文字, 因為雖然我們選擇了語言, 但是只有在控件初始化的時候會讀取我們的語言文件, 所以要么是回到rootVc, 要么是自己重新設置文字(暫時不知道其他方法, 如果有人知道請告知。 謝謝), 在自己pop回去的上一個頁面里面接收通知,并設置文字, 但是如果是重新進入新的頁面,那該頁面不需要進行任何操作, 會自動切換語言