1.介绍
在App的开发中,支持多种语言也是重要的。最近,本公司App统计到用户手机使用语言的多样情况。公司就决定让App支持国际化。
2、如何获取用户当前的手机语言
在苹果手机中,用户的各种信息都以 NSUserDefaults存储在手机中。其中用户的语言设置也包括在内。下面我们就是通过这个来获取当前用户的语言设置。获取设置的代码如下:
/*! 获取当前系统语言现实图:
*/
-(void)getSystemLanguage{
/*! 获取当前系统的语言设置
*/
NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];
NSArray * languageArrays = [userDefaults objectForKey:@"AppleLanguages"];
/*! 当前的语言
* 系统当前语言是 languageArrays (所有语言集合的第一个)的第一个对象
*/
NSString * curLanguage = languageArrays.firstObject;
NSLog(@"%@--\n%@",languageArrays,curLanguage);
/*! 输出的结果
*
2017-02-22 11:16:00.954 App国际化[1110:212917] (
"zh-Hans-US",
en
)--
zh-Hans-US
*/
}
3、我们开始实现App的国际化。
1》我们打开App。点击App的工程(蓝色的那个)。如图下图:
2》在点击 PROJECT 下面的App工程。并在点击 info.如下图:
3》 找到 Localizations 下方的➕ 并点击选择,您要添加的语言。如下图:
然后弹出下图,直接点击 Finish 即可。如下图:
点击后可看到下图:
从上图我们可以看到我们添加的语言(Chinese simp)。
4》 我们要创建一个 xx.string的文件。如下图:
选择 String File ,然后点击 next.将进入下图所示:
在命名的时候,有点要注意的。我们先把这个地方,标记为 【A】。一定要记住哈。然后点击Create,就得到下图所示:
然后,找到我上图标记的地方,并点击Localize... ,将得到下图:
我们选择 我们添加的语言。选择后点击插入,将获取得到下图:
注意上图,查看你的是否是这样,不是请改成这样。以上我们要创建的文件已经建好。下面我们做插入数据。
4、数据的插入
1》我们选择 Localizable.strings下的 (Chinese(Simplified))然后点击鼠标右键进入下图所示:
选择 ASCII Property List ,将可得到下图:
同理,也对 Localizable.strings 下的English 做这样的操作。如下图:(请注意不同和相同)
2》下面我们就开始使用我们插入的数据支持本地化。
对几个方法的解释:
/*! 写法的处理
* 国际化的几个函数
NSLocalizedString 介绍
1. 它的元神
#define NSLocalizedString(key, comment) \
[NSBundle.mainBundle localizedStringForKey:(key) value:@"" table:nil]
是一个宏。
参数:
@pram key :是本地查找的key
@pram comment: 对key的注释,不会显示,所以可不填
NSLocalizedStringFromTable 的介绍
1.它的元神
#define NSLocalizedStringFromTable(key, tbl, comment) \
[NSBundle.mainBundle localizedStringForKey:(key) value:@"" table:(tbl)]
是一个宏
参数:
@pram key: 查找的key.
@pram tbl: 文件的名字(如:Localizable)
@pram comment: 注释
NSLocalizedStringFromTableInBundle 的介绍
1.元神
#define NSLocalizedStringFromTableInBundle(key, tbl, bundle, comment) \
[bundle localizedStringForKey:(key) value:@"" table:(tbl)]
参数:
@pram key: 查找的key.
@pram tbl: 文件的名字(如:Localizable)
@pram bundle: 目标文件 (如:NSBundle.mainBundle)
@pram comment: 注释
NSLocalizedStringWithDefaultValue 的介绍
0、作用是临时更改对应的key值的Value.
1.元神
#define NSLocalizedStringWithDefaultValue(key, tbl, bundle, val, comment) \
[bundle localizedStringForKey:(key) value:(val) table:(tbl)]
参数:
@pram key: 查找的key.
@pram tbl: 文件的名字(如:Localizable)
@pram bundle: 目标文件 (如:NSBundle.mainBundle)
@parm val: 值
@pram comment: 注释
*/
3》我们代码中的使用
1、NSLocalizedString 的使用。
[self alertView:NSLocalizedString(@"你好!", @"这是注释")];
2、 NSLocalizedStringFromTable 的使用。
注意了,是否还记得上面我们说的一个重要的标志 【A】。 就是它, 如果那里的*.String 文件不是以Localizable 命名的话。那就不可以使用 NSLocalizedString 了。就要使用 NSLocalizedStringFromTable 。假如,我们创建的*.String 文件的名字是testLanguage。那么它的使用就是:
[self alertView:NSLocalizedStringFromTable(@"你好!", @"testLanguage", nil)];3、 NSLocalizedStringFromTableInBundle 的使用和上面两个方法一样。
4、NSLocalizedStringWithDefaultValue 的使用
作用是临时更换对应的key的值。使用如下:
[self alertView:NSLocalizedStringWithDefaultValue(@"你好", @"Localizable", [NSBundle mainBundle],@"成功QQ吧",nil)];
5、实战效果