在iOS中,是通過“xxx.lproj”目錄來定義每個語言的資源。這里的資源可以是圖片、文本、Storyboard、Xib等等。
iOS國際化,亦即:(支持)多語言。
核心思想:為所需要的各種語言單獨定義一份資源。
應用程序國際化
應用程序國際化,即APP國際化。
-
1.創建工程,再在“PROJECT”的“Info”里面,添加所需語言。
創建工程,添加??語
添加??語成功后,Main.storyboard和LaunchScreen.storyboard相應的改變。應用展示的所有文本都是以硬編碼字符串存在于Main.storyboard及ViewController里面。
-
2.從代碼中分離出文本:創建一個 “.strings” 擴展名的文件
來本地化字符串,需要把這些字符串全部放在一個單獨的文件中。它將會在包中簡單地引用這些字符串,而不是在實現、使用的方法中進行硬編碼。
Xcode使用帶有 “.strings” 擴展名的文件來存儲和檢索 程序中使用的所有字符串,以及支持的每種語言。根據iOS設備當前所使用的語言,在代碼中一個簡單的方法調用將會查找并返回符合設備語言要求的字符串。
點擊右鍵,選擇“New File…”,選擇“iOS”對應的“Resource”中的“Strings File”,如圖:創建 .Strings文件
點擊“Next”,為文件命名為InfoPlist.strings,然后點擊“save”。
-
3.創建完“InfoPlist.strings”(命名隨意~),工程目錄結構文件如下,單擊“InfoPlist.strings”,查看右邊的屬性,在Localizable欄添加語言。如圖:
1.點擊“Localization”,支持多語言
2.Localization里添加所支持的相應語言
3.“InfoPlist.strings”文件的變化
這個時候就可以在對應語言的“InfoPlist.strings”文件中,添加所支持的字符串了。(當然針對你的APP客戶的國籍,翻譯出所對應語言正確的字符串!!考驗你和“外貿”關系的時候到了。。。??????????)
4-1.添加對應語言所支持的字符串
4-2.添加對應語言所支持的字符串 -
4.運行,看效果:
APP名字
內容國際化
程序字符串國際化。
-
1.創建一個“Localizable.strings” 文件(點擊右鍵,選擇“New File…”,選擇“iOS”對應的“Resource”中的“Strings File”)。
創建好“Localizable.strings” 文件
注意:Localizable.strings 是系統默認名字。不能更改,如果看不順眼!!有個解決的辦法:在??“.pch”文件??里面,使用??宏定義??重新定義為一個別的名字!
-
2.添加語言在Localization.strings 中,按照"key" = "value"的格式。在使用時,用NSLocalizedString(@"key", @"")讀取內容。
Localization.strings (English)文件中,添加:"第一!絕對不意氣用事!" = "The first!Absolutely not impulsive!"; "第二!絕對不漏判任何一件壞事!" = "The second!Definitely not missing any bad thing!"; "第三!絕對裁判的公正漂亮!" = "The third!Absolutely the referee just beautiful!";
Localization.strings (Chinese)文件中,添加:
"第一!絕對不意氣用事!" = "第一!絕對不意氣用事!"; "第二!絕對不漏判任何一件壞事!" = "第二!絕對不漏判任何一件壞事!"; "第三!絕對裁判的公正漂亮!" = "第三!絕對裁判的公正漂亮!";
英文
簡體中文
NSString * label_Str1 = NSLocalizedString(@"第一!絕對不意氣用事!", nil);
NSString * label_Str2 = NSLocalizedString(@"第二!絕對不漏判任何一件壞事!", nil);
NSString * label_Str3 = NSLocalizedString(@"第三!絕對裁判的公正漂亮!", nil);
NSString * label_Str = [NSString stringWithFormat:@"%@\n%@\n%@",label_Str1,label_Str2,label_Str3];
UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(10, 240, self.view.frame.size.width, 120.f)];
label.text = label_Str;
//自動換行
label.numberOfLines = 0;
[self.view addSubview:label];
-
3.運行,看效果:
英文環境的效果
簡體中文環境的效果
優化:
在pch頭文件中,定義一個國際化對應的宏!
//宏定義國際化字符 #define INTERNATIONAL #ifdef INTERNATIONAL #define INTER_STR(a) (NSLocalizedString(a, nil)) #else #define INTER_STR(a) (a) #endif
NSString * label_Str1 = INTERSTR(@"第一!絕對不意氣用事!");
判斷支持的語言、當前語言:
NSArray *languages = [NSLocale preferredLanguages]; NSLog(@"支持的languages:%@",languages); NSString *currentLanguage = [languages objectAtIndex:0]; NSLog(@"當前語言currentLanguage:%@",currentLanguage); //日語:ja-CN、法語:fr-CN、fr-CA
格式:zh-Hans-US
zh-Hans:(語言)簡體中文、US:(地區)美國判斷當前語言是否是“日語”:
NSString * judge_str = [[currentLanguage componentsSeparatedByString:@"-"] objectAtIndex:0];//首位 if ([judge_str isEqualToString:@"ja"]) {//是“日語” }
或者:針對多個“-”的情況
if ([currentLanguage containString:@"ja-"]) { //是“日語” }