在开发的过程中,有时候会需要将应用名称和应用的标示信息进行简单的多语言支持,下面我们就来看看如何让应用支持多国语言的支持。
注:文中插图使用Xcode7.2.1演示。
1。应用名称的多语言显示
对于应用的名称来说,如果没有显式设置的话,系统会默认显示工程名字作为应用的名称,如果需要显示的应用名称与工程的名字不一样,需要在info.plist里显式添加Bundle display nameI字段,并填写对应的string内容为应用的名称。可是如果应用需要使用根据系统的语言设置显示不用语言的名称时该方法就不能满足我们的需求。我们可以通过系统的查找方法来为应用添加多语言支持。
1.1 在工程里创建InfoPlist.strings文件(.strings是系统提供的支持多语言显示的文件类型)。
1.2 点击右侧,添加语言对于该文件的依赖。
选择右侧辅助工具栏中的“Localization”,单击Localize选项:
在弹出的选择框中选择依赖该文件的语言种类:
选择工程->PROJECT->Locations, 选择+添加新的语言支持:
在弹出的选择框中,选择你需要的语言种类(此处以简体汉语为例子):
在弹出框中,选择需要国际化的文件(刚才我们创建的.strings文件):
现在点开我们最初创建的InfoPlist.strings 文件夹,发现该文件夹下多出了两个子文件夹:
现在我们可以在这个文件夹里填写Info.plist中需要国际化的字段(以应用的名称为例):
在InfoPlist.strings(English)中填写字段对应的英语名称,
CFBundleDisplayName = "APPName";(Attention:1.key与infoDictionary中对应的key值相同,并且不能使用“”;2.每个key-value结束必须使用;进行结束)
在InfoPlist.strings(Simplified)中填写字段对应的中文名称:
CFBundleDisplayName = "应用名称";
好了,准备工作结束,设置系统显示语言为中文,运行你的应用,看看应用对应的名称是否是你设置的名称;然后在设置中更改系统的显示语言为英语,查看应用对应的名称。
2。应用内显示内容的国际化
创建对应的.strings文件,注意需要用Localizable进行命名(不用也可以,我们在第三个问题单独做说明),勾选需要依赖该文件夹的语言种类,然后在对应的语言中编辑对应的key-value键值对,例如:我们定义了一个key为var,
在Localizable.strings(English)中,
"var" = "I am English variable";
在Localizable.strings(Simplified)中,
"var" = "我是中文变量";
然后我们就可以通过NSLocalizedString(<#key#>, <#comment#>)
方法,让系统根据当前的语言环境选择相关的语言下对应的value,key是我们定义的字符串(例如“var”),commentshi是一个用来说明变量的字符串,可以为nil。在不同的语言环境下使用log打印对应的变量值,系统就会根据当前的系统语言环境选择对应的value值。
NSLog(@"variable = %@",NSLocalizedString(@"var",nil));
3.引申探讨
查找Api我们发现NSLocalizedString(<#key#>, <#comment#>)是一个宏定义:
#define NSLocalizedString(key, comment) \
[[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]
所以如果你需要创建多个.strings文件,或者不想使用默认的Localizable进行命名,都可以使用自己的分类方式进行.strings的命名,可以使用以下方法进行获取对应的value值。
(1) 使用另外一个宏定义
NSLocalizedStringFromTable(key, tbl, comment)
(2)直接使用
[[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]。