【iOS】语言国际化(本地化)

时间:2022-10-14 20:22:16

【环境描述】

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编码格式。添加后的工程目录如下:

    【iOS】语言国际化(本地化)

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部分设置为选中状态