App的本地化或者国际化

时间:2021-01-18 20:22:01

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
*/
}
现实图:

App的本地化或者国际化
3、我们开始实现App的国际化。

1》我们打开App。点击App的工程(蓝色的那个)。如图下图:

App的本地化或者国际化

2》在点击 PROJECT 下面的App工程。并在点击 info.如下图:

App的本地化或者国际化

3》 找到 Localizations  下方的 并点击选择,您要添加的语言。如下图:

App的本地化或者国际化

然后弹出下图,直接点击 Finish 即可。如下图:

App的本地化或者国际化

点击后可看到下图:

App的本地化或者国际化

从上图我们可以看到我们添加的语言(Chinese simp)。

4》 我们要创建一个 xx.string的文件。如下图:

App的本地化或者国际化

选择 String File ,然后点击 next.将进入下图所示:

App的本地化或者国际化

在命名的时候,有点要注意的。我们先把这个地方,标记为 【A】。一定要记住哈。然后点击Create,就得到下图所示:

App的本地化或者国际化

然后,找到我上图标记的地方,并点击Localize... ,将得到下图:

App的本地化或者国际化

我们选择 我们添加的语言。选择后点击插入,将获取得到下图:

App的本地化或者国际化

注意上图,查看你的是否是这样,不是请改成这样。以上我们要创建的文件已经建好。下面我们做插入数据。

4、数据的插入

1》我们选择 Localizable.strings下的 (Chinese(Simplified))然后点击鼠标右键进入下图所示:

App的本地化或者国际化

选择  ASCII Property List ,将可得到下图:

App的本地化或者国际化

同理,也对  Localizable.strings 下的English 做这样的操作。如下图:(请注意不同和相同)

App的本地化或者国际化

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、实战效果

App的本地化或者国际化App的本地化或者国际化App的本地化或者国际化