本人只是記錄下自己實現(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è)置文字, 但是如果是重新進入新的頁面,那該頁面不需要進行任何操作, 會自動切換語言