標籤:tracking files cts objective efi 預設 ini product 中文
一:尾隨系統切換語言1>建立好項目project後, 建立一個多語言檔案:
2>加入要設定的語言類型:
3>加入成功
細心的朋友可能會發如今
English
後面寫的是
3 Files Localized
,這是由於英語是系統預設加入的,並且同一時候為
Main.storyboard
和
LaunchScreen.storyboard
設定了多語言,我在自己加入的時候沒有勾選這兩項.3>使用多語言檔案在應用內設定相應語言
"label"="label";"label"="標籤";"label"="ラベル";
4>在類中為控制項賦值
NSLocalizedString
的使用,有一個必要的條件,就是:多語言檔案名稱字必須是
Localizable
,否則到最後顯示的僅僅能是key;者中設定完之後僅僅能讓應用尾隨系統的語言版本號碼進行切換,而使用者不能手動進行切換
label.text = NSLocalizedString("label", nil)
相關宏說明
//尾隨系統切換, 多語言檔案名稱必須是LocalizableNSLocalizedString("label", nil);//以下三個都能夠手動設定多語言//第一個參數:是多語言中的key//第二個參數:是多語言檔案的名字//第三個參數:是對key的凝視說明,一般傳nilNSLocalizedStringFromTable(@"label", @"STLocalizable", nil);//指定多語言檔案名稱和bundleNSLocalizedStringFromTableInBundle(@"label", @"STLocalizable", bundle, nil);//在上面的基礎上添加一個預設值的參數NSLocalizedStringWithDefaultValue(@"label", @"STLocalizable", bundle, @"label", nil);
也能夠使用
NSLocalizedStringFromTable
label.text = NSLocalizedStringFromTable(@"label", @"STLocalizable", nil);
這樣在切換系統語言之後,啟動應用後APP內部的語言也就跟著切換了
二:APP內手動切換語言1>項目project
Show in Finder
後,發現每一種語言都相應一個目錄,尾碼是
.lproj
,
在APP內切換語言的時候,實際上就是取這些目錄中的
STLocalizable.strings
檔案
2>擷取
STLocalizable.strings
擷取檔案的
value
值,相應的想要切換語言的話,直接切換
pathForResource
後面的參數就可以
NSString *path = [[NSBundle mainBundle] pathForResource:@"zh-Hans" ofType:@"lproj"];NSString *labelString = [[NSBundle bundleWithPath:path] localizedStringForKey:@"label" value:nil table:@"STLocalizable"];NSLog(@"result: %@", labelString);//輸出:MultiLanguage[1887:72599] result: 標籤
3>在應用內切換語言,用
NSUserDefaults
儲存當前語言
- (IBAction)changeLanguage:(UIButton *)sender { switch (sender.tag) { case 10: { //中文 [[NSUserDefaults standardUserDefaults] setObject:@"zh-Hans" forKey:appLanguage]; } break; case 11: { //日文 [[NSUserDefaults standardUserDefaults] setObject:@"ja" forKey:appLanguage]; } break; case 12: { //英文 [[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:appLanguage]; } break; default: break; }}
4>程式退出去後,下次進入繼續使用上次關閉程式的語言
//依據NSUserDefaults的key去取多語言類型NSString *laguageType =[NSString stringWithFormat:@"%@", [[NSUserDefaults standardUserDefaults] objectForKey:@"appLanguage"]];//在檔案目錄中確認多語言類型相應的路徑NSString *path = [[NSBundle mainBundle] pathForResource:laguageType ofType:@"lproj"];//在多語言檔案裡尋找label相應的值NSString *labelText = [[NSBundle bundleWithPath:path] localizedStringForKey:@"label" value:nil table:@"ASLocalized"];self.label.text = labelText;
擴充使用者第一次啟動APP的時候顯示什麼語言1>預設設定一種語言,比方英文,在
APPDelegate
的
didFinishLaunchingWithOptions
中:
if (![[NSUserDefaults standardUserDefaults] objectForKey:appLanguage]) { //預設設為英文 [[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:appLanguage];}
2>尾隨系統語言須要擷取系統的慣用語言順序,然後取第一個慣用語言
//擷取第一個慣用語言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]; } else if ([language hasPrefix:@"ja"] ) { [[NSUserDefaults standardUserDefaults] setObject:@"ja" forKey:appLanguage]; } else { [[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:appLanguage]; }}
改動系統預設開發語言(預設英語)
多語言開發可能用到的方法
#define LanguageKey @"appLanguage"//擷取當前語言[[NSUserDefaults standardUserDefaults] objectForKey:LanguageKey];//擷取慣用語言順序[NSLocale preferredLanguages];//擷取慣用語言第一語言[[NSLocale preferredLanguages] objectAtIndex:0];//擷取系統全部語言[NSLocale availableLocaleIdentifiers];//擷取當前語言檔案路徑NSString *currentLanguage = [[NSUserDefaults standardUserDefaults] ;objectForKey:LanguageKey];NSString *path = [[NSBundle mainBundle] pathForResource:currentLanguage ofType:@"lproj"];//依據key擷取當前語言相應的本地字串(參數value:假設key是nil或key在表中找不到本地化字串,則返回的值。)NSString *value = [[NSBundle bundleWithPath:path] localizedStringForKey:@"label" value:nil table:@"TiLocalizable"];
iOS多語言(國際化)開發(尾隨系統 + APP內手動設定)