iOS开发-APP语言国际化

我们这个项目是要求有两个语言版本的:荷兰文和英文,我负责国际化语言管理,我想还是整理一个比较全面的文章,和大家进行知识分享吧。

1、国际化就是将标签、提示信息等信息放到资源文件中,随着程序需要的语言提供对应的资源文件。以key/value对存储,每个资源的key值不变,value随着需求改变。

2、添加多语言:

新建工程(TestLocalization-master)—> TestLocalization-master—>project—>info—>Localizations,点击加号添加需要的语言。

屏幕快照 2016-05-20 下午3.52.14

3.创建语言资源文件cmd+N(新建)—>Resource—> Strings File —>Next—>命名为Localizable.strings —> creates —>Finish

添加属性:点击Localizable.strings—>右侧Localization —> Localize—>选择语言—>Localize

屏幕快照 2016-08-31 下午2.52.57

—>取消Base,勾选English, Chinses(Simplified):

屏幕快照 2016-08-31 下午1.59.38

4.添加属性Localizable.strings:修改标签显示语言

例如:在荷兰文件下,sign in写对应的荷兰语,在中文下,sign in 写对应的中文。

屏幕快照 2016-09-02 下午4.06.41

UILabel *label = [[UILabel alloc]init];

label.frame = CGRectMake(100, 100, 80, 40);

label.textNSLocalizedString(@”Sign In”,@””);

[self.view addSubview:label];

5.获取所有语言和当前语言:

    //获得当前设备的语言

    // 取得用户默认信息

    NSUserDefaults *defaults = [ NSUserDefaults standardUserDefaults ];

    // 取得 iPhone 支持的所有语言设置

    NSArray *languages = [defaults objectForKey : @”AppleLanguages” ];

    NSLog (@”%@”, languages);

    // 获得当前iPhone使用的语言

    NSString* currentLanguage = [languages objectAtIndex:0];

    NSLog(@”currentLanguage%@”,currentLanguage);

二、另外关于 app 显示名称的国际化处理

和上面差不多;只需要手动创建一个 InfoPlist.strings 文件;同样选中 需要国际化的语言;

 在 English文件和 中文文件 里面;

写上对应的 

CFBundleDisplayName = “ABS-EN”;

CFBundleDisplayName = “ABS-CN”;

即可;

三、另外关于图片的国际化

   可以准备多套图片,然后在 strings 文件 里面,处理名称即可

四、隐私数据访问问题多语言版

你的项目中访问了隐私数据,比如:相机,相册,联系人等,在Xcode8中打开编译的话,统统会crash,控制台会输出下面这样的日志:

iOS10访问隐私数据打印日志.png

这是因为iOS对用户的安全和隐私的增强,在申请很多私有权限的时候都需要添加描述,但是,在使用Xcode 8之前的Xcode还是使用系统的权限通知框.要想解决这个问题,只需要在info.plist
添加NSContactsUsageDescription
key, value自己随意填写就可以,这里列举出对应的key(Source Code模式下):

<!-- 相册 --> 
<key>NSPhotoLibraryUsageDescription</key> 
<string>App需要您的同意,才能访问相册</string> 
<!-- 相机 --> 
<key>NSCameraUsageDescription</key> 
<string>App需要您的同意,才能访问相机</string> 

多语言提示实现如下:

1.首先创建多语言资源文件InfoPlist.strings

%e5%b1%8f%e5%b9%95%e5%bf%ab%e7%85%a7-2016-11-07-%e4%b8%8a%e5%8d%8810-02-312.在info.plist里面添加描述:

<key>NSCameraUsageDescription</key>

<string>NSCameraUsageDescription</string>

<key>NSLocationWhenInUseUsageDescription</key>

<string>NSLocationWhenInUseUsageDescription</string>

<key>NSPhotoLibraryUsageDescription</key>

<string>NSPhotoLibraryUsageDescription</string>

是不是很简单?

分享到: 更多