【环境描述】
OS X LM 10.8,Xcode4.4.1,iOS 5.1
【问题描述】
国际化包括内容和应用标题等的字符串国际化(本地化),供后续查阅。
【问题分析】
一、内容国际化
1、查看系统支持的语言种类
//获取系统支持的语言
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSArray *languages = [defaults objectForKey:@"AppleLanguages"];
NSLog(@"all langs \n %@", languages);
//当前使用的语言
NSString *currentLanguage = [languages objectAtIndex:0];
NSLog(@"%@",currentLanguage);
输出结果如下:
all langs
(en,fr,de,ja,nl,it,es,pt,"pt-PT",da,fi,nb,sv,ko,"zh-Hans","zh-Hant",ru,pl,tr,uk,ar,hr,cs,el,he,ro,sk,th,id,ms,"en-GB",ca,hu,vi)
说明:zh-Hans表示中文简体,zh-Hant表示中文繁体
2、创建本地化文件,用于存储字符串
创建英文文件 ../en.lproj/lang.strings,用于存储英文字符串,字符串内容参考: "STR_ID_TEST" = "Test123";
创建中文文件 ../zh-Hans/lang.strings,用于存储中文简体字符串,字符串内容参考:"STR_ID_TEST" = "测试123";
3、把创建的文件添加到工程中
备注:在Xcode4.4.1中,貌似不需要注意编码格式,之前在Xcode3.2.6版本中,字符串文件需要Unicode16编码格式。添加后的工程目录如下:
4、代码中调用
NSString *title = NSLocalizedStringFromTable(@"STR_ID_TEST", @"lang", nil);
备注:建议自定义字符串文件名,如果用默认的文件名,有可能在真机上调用失败。
二、应用名国际化
1、创建中文资源文件
在中文和英文InfoPlist.strings中分别创建CFBundleDisplayName,具体步骤如下:
把工程创建时默认生成的en.lproj/InfoPlist.strings拷贝到String/en.lproj目录下,然后复制InfoPlist.strings到String/zh-Hans目录下,
在String/en.lproj/InfoPlist.strings文件中创建字符串,如下:"CFBundleDisplayName" = "Pro1";
在String/zh-Hans.lproj/InfoPlist.strings中创添加字符串:"CFBundleDisplayName" = "中文1";
2、添加应用名国际化属性
在***-Info.plist文件中添加:Application has localized display name, 并将后面的value部分设置为选中状态