简介:语言本地化,又叫做语言国际化。是指根据用户操作系统的语言设置,自动将应用程序的语言设置为和用户操作系统语言一致的语言。往往一些应用程序需要提供给多个国家的人群使用,或者一个国家有多种语言,这就要求应用程序所展示的文字、图片等信息,能够让讲不同语言的用户读懂、看懂。进而提出为同一个应用程序适配多种语言,也即是国际化。语言国际化之所以又叫做语言本地化,这是站在每个用户的角度而言的,是指能够让用户本地、本土人群能够看懂的语言信息,顾名思义,语言本地化。其实语言本地化 == 语言国际化!

配置需要国际化的语言

配置需要国际化的语言,这也是国际化之前的准备工作,无论我们是国际化App名称、代码中的字符串、图片、还是storyboard和xib,都需要进行这一步的准备工作(一个项目中需要且仅需要配置一次)。

1. 选中project->Info->Localizations,然后点击”+”,添加需要国际化/本地化的语言。英文国际化是工程建立时默认添加的,此处以添加简体中文为例,如下图(默认需要勾选Use Base Internationalization):

添加中文语言国际化

弹出如下对话框,直接点击finish,如下图:

弹出框

添加效果图如下:

添加成功

备注:“zh-Hans”和“zh-Hant”是简体中文和繁体中文的缩写。这是标准的缩写。H可大写也可小写。”en”是英语的缩写。其他语言请百度各国语言缩写即可查询。

(一)应用名称本地化/国际化

应用名称本地化,是指同一个App的名称,在不同的语言环境下(也就是手机设备的语言设置)显示不同的名称。比如,微信在简体中文环境下App名称显示为“微信”,在英语环境下显示为“weChat”。下面就开始进行应用名称本地化。

1. 选中Info.plist,按下键盘上的command + N,选择并创建文件Strings File(iOS->Resource->Strings File)

Strings File

2. 文件命名为:InfoPlist.strings(首字母大写,必须是这个名称),点击Localize,来配置语言文件。

Localize

3. 选择需要本地化的语言。

原理:程序启动时,会根据操作系统设置的语言,自动加载InfoPlist.strings文件下对应的语言文件,然后显示应用程序的名字。

English/Chinese

4. 接下来,我们分别用不同的语言给InfoPlist.strings下的文件设置对应的名字。

(1).在InfoPlist.strings(English)文件中添加下面代码:(CFBundleDisplayName可以使用双引号,也可以不使用双引号!)CFBundleDisplayName="Demo";

Demo是App在英语环境环境下显示的名称

(2).在InfoPlist.strings(Simplified)文件中添加下面代码:CFBundleDisplayName="演示";

演示是App在中文环境环境下显示的名称

在手机上安装APP,切换不同的语言环境,即可查看APP名字的变化。

(二) 代码中字符串的国际化

1. 和上面APP名称国际化一样,先创建本地化语言文件,名称为Localizable.strings(首字母大写,必须是这个名称),选中InfoPlist.strings,按下键盘上的command + N,选择并创建文件Strings File(iOS->Resource->Strings File)

Localizable.strings

2. 选中Localizable.strings文件,在Xcode的File inspection中点击Localize,选择我们需要本地化的语言,由于我们在配置需要的国际化语言中添加了简体中文,英文是默认添加的,所以点击Localize弹框选项中会有三个选项:Base、English、Chinese(Simplified),选择一项即可。因为我们要配置简体中文和英文,这里我们选English。

语言选项

3. 在xcode右侧Localization下选中English、Chinese,此时,Xcode左侧的Localizable.stirings下多了两个文件,Localizable.stirings(English)、Localizable.stirings(Simplified),然后我们只需要在Localizable.strings下对应的文件中,分别以Key-Value的形式,为代码中每一个需要本地化的字符串赋值,如下图:

文件内容-English

文件内容-Chinese

4. 我们只需要使用Foundation框架自带的NSLocalizedString(key, comment)这个宏根据Key获取对应的字符串,然后赋值给代码中的字符串。NSLocalizedString(key, comment)

第一个参数是内容,根据第一个参数去对应语言的文件中取对应的字符串,第二个参数将会转化为字符串文件里的注释,可以传nil,也可以传空字符串@""。

举个例子

5. 不同环境下的显示效果:

中文环境:

中文环境

英文环境:

英文环境