简介:语言本地化,又叫做语言国际化。是指根据用户操作系统的语言设置,自动将应用程序的语言设置为和用户操作系统语言一致的语言。往往一些应用程序需要提供给多个国家的人群使用,或者一个国家有多种语言,这就要求应用程序所展示的文字、图片等信息,能够让讲不同语言的用户读懂、看懂。进而提出为同一个应用程序适配多种语言,也即是国际化。语言国际化之所以又叫做语言本地化,这是站在每个用户的角度而言的,是指能够让用户本地、本土人群能够看懂的语言信息,顾名思义,语言本地化。其实语言本地化 == 语言国际化!
配置需要国际化的语言
配置需要国际化的语言,这也是国际化之前的准备工作,无论我们是国际化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 File2. 文件命名为:InfoPlist.strings(首字母大写,必须是这个名称),点击Localize,来配置语言文件。
Localize3. 选择需要本地化的语言。
原理:程序启动时,会根据操作系统设置的语言,自动加载InfoPlist.strings文件下对应的语言文件,然后显示应用程序的名字。
English/Chinese4. 接下来,我们分别用不同的语言给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.strings2. 选中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 文件内容-Chinese4. 我们只需要使用Foundation框架自带的NSLocalizedString(key, comment)这个宏根据Key获取对应的字符串,然后赋值给代码中的字符串。
NSLocalizedString(key, comment)
第一个参数是内容,根据第一个参数去对应语言的文件中取对应的字符串,第二个参数将会转化为字符串文件里的注释,可以传nil,也可以传空字符串@""。
举个例子5. 不同环境下的显示效果:
中文环境:
中文环境英文环境:
英文环境
网友评论