一:跟隨系統(tǒng)切換語言
1>創(chuàng)建好項目工程后, 新建一個多語言文件:
細(xì)心的朋友可能會發(fā)現(xiàn)在English后面寫的是3 Files Localized,這是因為英語是系統(tǒng)默認(rèn)添加的,而且同時為Main.storyboard和LaunchScreen.storyboard設(shè)置了多語言,我在自己添加的時候沒有勾選這兩項.
3>使用多語言文件在應(yīng)用內(nèi)設(shè)置對應(yīng)語言
"showText" = "this is a English Text";
"showText" = "Ini adalah teks bahasa Indonesia";
"showText" = "這是一個簡體中文";
通過showText這個Key來對應(yīng)“=”后面不同語言的文字
NSLocalizedString的使用,有一個必要的條件,就是:多語言文件名字必須是Localizable,否則到最后顯示的只能是key;者中設(shè)置完之后只能讓應(yīng)用跟隨系統(tǒng)的語言版本進(jìn)行切換,而用戶不能手動進(jìn)行切換
label.text =NSLocalizedString("label",nil)
//跟隨系統(tǒng)切換, 多語言文件名必須是LocalizableNSLocalizedString("showText",nil);
//下面三個都可以手動設(shè)置多語言
//第一個參數(shù):是多語言中的key
//第二個參數(shù):是多語言文件的名字
//第三個參數(shù):是對key的注釋說明,一般傳nil
NSLocalizedStringFromTable(@"showText", @"STLocalizable",nil);
//指定多語言文件名和bundle
NSLocalizedStringFromTableInBundle(@"showText", @"Localizable", bundle,nil);
//在上面的基礎(chǔ)上增加一個默認(rèn)值的參數(shù)
NSLocalizedStringWithDefaultValue(@"showText", @"Localizable", bundle, @"label",nil);
也可以使用NSLocalizedStringFromTable
label.text =NSLocalizedStringFromTable(@"showText", @"Localizable",nil);
這樣在切換系統(tǒng)語言之后,啟動應(yīng)用后APP內(nèi)部的語言也就跟著切換了
二:APP內(nèi)手動切換語言
1>項目工程Show in Finder后,發(fā)現(xiàn)每一種語言都對應(yīng)一個文件夾,后綴是.lproj,
在APP內(nèi)切換語言的時候,實際上就是取這些文件夾中的Localizable.strings文件
文件的value值,對應(yīng)的想要切換語言的話,直接切換pathForResource后面的參數(shù)即可
NSString*path = [[NSBundlemainBundle] pathForResource:@"zh-Hans"ofType:@"lproj"];
NSString*labelString = [[NSBundlebundleWithPath:path] localizedStringForKey:@"label"value:niltable:@"STLocalizable"];
NSLog(@"result: %@", labelString);
//輸出:MultiLanguage[1887:72599] result: 標(biāo)簽
3>在應(yīng)用內(nèi)切換語言,用NSUserDefaults存儲當(dāng)前語言
- (IBAction)changeLanguage:(UIButton*)sender {switch(sender.tag) {
case10: {
//中文
[[NSUserDefaultsstandardUserDefaults] setObject:@"zh-Hans"forKey:appLanguage];? ? ? ?
?}
break;
case11: {
//日文
[[NSUserDefaultsstandardUserDefaults] setObject:@"id"forKey:appLanguage];? ? ? ??
}
break;
case12:?
{
//英文
[[NSUserDefaultsstandardUserDefaults] setObject:@"en"forKey:appLanguage]; ? ? ??
?}
break;
default:
break;? ?
?}
}
4>程序退出去后,下次進(jìn)入繼續(xù)使用上次關(guān)閉程序的語言
//根據(jù)NSUserDefaults的key去取多語言類型
NSString*laguageType =[NSStringstringWithFormat:@"%@", [[NSUserDefaultsstandardUserDefaults] objectForKey:@"appLanguage"]];
//在文件目錄中確認(rèn)多語言類型對應(yīng)的路徑
NSString*path = [[NSBundlemainBundle] pathForResource:laguageType ofType:@"lproj"];
//在多語言文件中查找label對應(yīng)的值
NSString*labelText = [[NSBundlebundleWithPath:path] localizedStringForKey:@"label"value:niltable:@"ASLocalized"];self.label.text= labelText;
1>默認(rèn)設(shè)置一種語言,比如英文,在APPDelegate的didFinishLaunchingWithOptions中:
if(![[NSUserDefaultsstandardUserDefaults] objectForKey:appLanguage]) {
//默認(rèn)設(shè)為英文[[NSUserDefaultsstandardUserDefaults] setObject:@"en"forKey:appLanguage];
}
需要獲取系統(tǒng)的首選語言順序,然后取第一個首選語言
//獲取第一個首選語言NSString *language = [NSLocale preferredLanguages][0];
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];? ? }elseif([language hasPrefix:@"ja"] ) {? ? ? ?
?[[NSUserDefaults standardUserDefaults]setObject:@"ja"forKey:appLanguage];? ??
}else{? ? ? ??
[[NSUserDefaults standardUserDefaults]setObject:@"en"forKey:appLanguage];? ?
?}
}
修改系統(tǒng)默認(rèn)開發(fā)語言(默認(rèn)英語)
#define LanguageKey @"appLanguage"http://獲取當(dāng)前語言[[NSUserDefaultsstandardUserDefaults] objectForKey:LanguageKey];
//獲取首選語言順序
[NSLocale preferredLanguages];
//獲取首選語言第一語言
[[NSLocale preferredLanguages] objectAtIndex:0];
//獲取系統(tǒng)所有語言[NSLocale availableLocaleIdentifiers];
//獲取當(dāng)前語言文件路徑NSString*currentLanguage = [[NSUserDefaultsstandardUserDefaults] ;objectForKey:LanguageKey];NSString*path = [[NSBundlemainBundle] pathForResource:currentLanguage ofType:@"lproj"];
//根據(jù)key獲取當(dāng)前語言對應(yīng)的本地字符串(參數(shù)value:如果key是nil或key在表中找不到本地化字符串壁肋,則返回的值。)
NSString*value = [[NSBundlebundleWithPath:path] localizedStringForKey:@"label"value:niltable:@"Localizable"];
三 以下是自己理解寫出來的
#import "ViewController.h"
//定義一個宏language是語言類型燕差,key是獲取語言的鍵值涯贞,Localizable是項目里面創(chuàng)建的.strings文件名 例如:LocalizableStr(@"en",@"showText");
#define LocalizableStr(language,key) [[NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:language ofType:@"lproj"]] localizedStringForKey:key value:nil table:@"Localizable"];
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *EnglishLabel;
@property (weak, nonatomic) IBOutlet UILabel *chaineseLable;
@property (weak, nonatomic) IBOutlet UILabel *indonesian;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (IBAction)englishButton:(id)sender {
//通過宏手動設(shè)置語言
self.EnglishLabel.text = LocalizableStr(@"en",@"showText");
}
- (IBAction)chineseButton:(id)sender {
//通過宏手動設(shè)置語言
self.chaineseLable.text = LocalizableStr(@"zh-Hans",@"showText");
}
- (IBAction)indonesianButton:(id)sender {
//跟隨系統(tǒng)語言
self.indonesian.text = NSLocalizedString(@"showText", nil);
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
原創(chuàng) http://blog.csdn.net/feng2qing/article/details/60479620
手動設(shè)置參考 http://www.reibang.com/p/0ae9dca9a75d