iOS 开发笔记--国际化

来源:互联网 发布:阿里巴巴排名优化工具 编辑:程序博客网 时间:2024/06/10 00:55

1. 在xcode中设置需要支持的语言

在 xcode 的设置 info -> Localizations 中添加需要支持的语言(下图我添加了 English 和 Chinese )
这里写图片描述

这里我们会看到有一个 Use Base Internationalization 选项,这个是为 xib/storyboard 提供一个 base 的布局模板,我们添加新的语言时,不需要对布局进行修改,只需要配置 .strings 文件。如果没有勾选 Use Base Internationalization 那么 Xcode 会为不同的语言产生不同的布局文件,我们需要对不同的语言进行布局。

已经勾选 Use Base Internationalization 选项
这里写图片描述

未勾选 Use Base Internationalization 选项
这里写图片描述

2. xib/storyboard 国际化

在第一步添加语言的时候会让我们选择需要国际化的 xib/storyboard 如下图:
这里写图片描述

如果 xib/storyboard 中已经有 UILabel、UIButton 等需要设置文本的控件,系统会自动产生对应的国际化配置,如下图我的 main.Storyboard 中有个文本为 ‘hello’ 的 UILabel
这里写图片描述

为了支持中文我们在 Mian.strings(Chiness(simplified)) 增加中文支持:
这里写图片描述

注意:Wok-dD-pEW.text 这个key是系统自动生成的,我们只需要设置value

3. 代码实现国际化

国际化主要借助下面三个宏:
1. NSLocalizedString:在mainBundle中,从Localizable.strings中加载key
2. NSLocalizedStringFromTable:在mainBundle中,从tableName指定的文件中加载key
3. NSLocalizedStringFromTableInBundle:在指定的bundle中,从tableName指定的文件中加载key
4. NSLocalizedStringWithDefaultValue:在指定的bundle中,从tableName指定的文件中加载key,但可以设置一个默认值,在key找不到时有效。

实现语言的动态切换
1. NSLocalizedString,NSLocalizedStringFromTable个方法固定从mainBundle中加载资源,当我们切换系统语言时,我们的app只有重启语言才会切换。那怎么实现和微信一样的点击切换按钮就切换语言,不需要重启app呢?没错可以使用NSLocalizedStringFromTableInBundle,通过从不同的 bundle 中加载资源,实现动态切换语言。
2.当我们增加语言配置的时候,会自动生成 .lproj 的资源包,如下图(zh-Hans.lproj, en.lproj)
这里写图片描述

//这里我自己定义了一个宏define EnBundle [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"]]//英文#define Zh_HansBundle [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"zh-Hans" ofType:@"lproj"]]//中文#define IDSLocal(key) NSLocalizedStringFromTableInBundle(key, nil, [ isChinese?Zh_HansBundle:EnBundle, nil)//这里我们可以从 NSUserDefault 中读取 isChinese 的值,语言切换开关修改 isChinese 值实现语言的动态切换

最后我们就可以愉快的使用 IDSLocal(key) 这个宏了

4. AppName的国际化

  1. 在 Info.plist 中增加配置 Application has localized display name 并设置为 YES
  2. 在工程中新增 InfoPlist.strings 文件并增加对应的语言
    这里写图片描述
  3. 分别配置CFBundleDisplayName的值就OK了
    “CFBundleDisplayName”=”xxxxx”;