在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”,如图:
点击“Next”,为文件命名为InfoPlist.strings,然后点击“save”。
-
3.创建完“InfoPlist.strings”(命名随意~),工程目录结构文件如下,单击“InfoPlist.strings”,查看右边的属性,在Localizable栏添加语言。如图:
这个时候就可以在对应语言的“InfoPlist.strings”文件中,添加所支持的字符串了。(当然针对你的APP客户的国籍,翻译出所对应语言正确的字符串!!考验你和“外贸”关系的时候到了。。。😂😂😂😂😂)
-
4.运行,看效果:
内容国际化
程序字符串国际化。
-
1.创建一个“Localizable.strings” 文件(点击右键,选择“New File…”,选择“iOS”对应的“Resource”中的“Strings File”)。
注意: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-"]) { //是“日语” }