iOS-应用的国际化和本地化

使用iOS应用的用户来自世界各地。这些来自不同国家的用户,使用的语言也不同。通过国际化和本地化过程,可以确保用户都能正常使用应用。

国际化和本地化

  国际化的作用就是避免在应用中写死某种本土文化(语言,货币等)。本地化作用则是根据用户设置的语言和区域格式,为应用提供适当的数据。

通过NSNumberFormatter实施国际化

  首先我们先了解NSLocale这个类。NSLocale对象表示某个区域的本土文化信息,其中包括如何显示符号、日期和小数,以及如何使用公有制等。
  像NSLocal类发送currentLocale消息,可以得到一个NSLocale对象,该对象表示用户当前的区域设置。
  NSNumberFormatter是用来格式化数字和货币格式等的,类似的还有NSDateFormatter用于格式化日期。NSNumberFormatter提供了stringFromNumber:方法,用于返回当前区域格式的数字。

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
NSString *numberAsString = [formatter stringFromNumber:@123456.789];

  NSNumberFormatter还可以格式化显示货币。如果将NSNumberFormatter对象的numberStyle属性设置为NSNumberFormatterCurrentStyle,那么NSNumberFormatter不但会格式化数字,还会添加当前区域的货币符号。

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterCurrentStyle;
NSString *numberAsString = [formatter stringFromNumber:@123456.789];

资源的本地化

  任何资源文件,无论是图片文件还是XIB文件,都可以实施本地化。
  Xcode提供了一项称为基础国际化额功能,可以轻松为XIB文件添加多语言支持。当项目启动基础国际化后,Xcode会自动创建一个包含主XIB文件的Base.lproj目录。这样,项目就不需要为每一种语言都创建一个独立的XIB文件,只要在主XIB文件的基础上创建包含对应语言字符串的Localizable.string文件就可以了。

NSLocalizedString()与字符串对照表

  应用中我们会需要动态生成NSString对象,或者在界面显示一些字符串常量。为了能显示这些字符串的对语言版本,需要创建一个字符串对照表。字符串对照表包含的是键值对。为了能够本地化代码中的字符串,需要使用NSLocalizedString()宏替换字符串常量。
  运行时,使NSLocalizedString会遍历根目录中所有的字符串对照表,找出和设备当前语言相匹配的那一个。NSLocalizedString()宏第一个参数为键,第二个参数为注释(可选)。

NSString *hello = NSLocalizedString(@"hello", @"The greeting for the user.");

用NSLocalizedString本地化某个实现文件后,就可以通过命令行程序genstrings自动生成对应的字符串对照表。

首先我们需要打开终端,并切换到我们需要本地化的文件所在的目录下。

cd 你的文件的目录

然后使用genstrings生成Localizable.stings文件。-a属性为不生成新的文件而在已有的Localizable.stings中新增字段。

genstings LYSViewController.m(需要本地化的文件)
genstings -a xxxxxxxxxxxx.m