iOS多語言(國際化)開發(尾隨系統 + APP內手動設定)

來源:互聯網
上載者:User

標籤:tracking   files   cts   objective   efi   預設   ini   product   中文   

一:尾隨系統切換語言1>建立好項目project後, 建立一個多語言檔案:

2>加入要設定的語言類型:

3>加入成功

細心的朋友可能會發如今 English後面寫的是 3 Files Localized,這是由於英語是系統預設加入的,並且同一時候為 Main.storyboardLaunchScreen.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>預設設定一種語言,比方英文,在 APPDelegatedidFinishLaunchingWithOptions中:
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內手動設定)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.