公司原本有一款仅支持中文的app,随着国际化发展,产品经理要求添加相关设置,让app在支持中文的同时,可以支持英文。简书搜索,发现以下两篇文章可以参考:
文章一: //www.greatytc.com/p/88c1b65e3ddb
文章二://www.greatytc.com/p/782aaf3bf7da
文章一写得非常详细,没有任何经验的小白,只要按照作者分享的步骤一步步操作,很快就可以学会。遗憾的是作者还没有补上xib和storyBoard的国际化过程。
文章二写得相对简单,但是添加了xib和storyBoard的国际化过程。
本文综合两篇文章的精华和自己的实现过程,基于xcode8.1,简要描述一下实现国际化的核心步骤,方便自己今后查阅。
1 配置需要国际化的语言
选中project->Info->Localizations,然后点击"+",添加需要国际化/本地化的语言,如下图(默认需要勾选Use Base Internationalization):
2 应用名称本地化/国际化
比如,微信在简体中文环境下App名称显示为“微信”,在英语环境下显示为“weChat”。下面就开始进行应用名称本地化。
文件名字命名为InfoPlist,且必须是这个名字(因每个人电脑设置差异,此处本人电脑没有显示strings后缀名):
点击create后,Xcode左侧导航列表就会出现名为InfoPlist.strings的文件,如下图:
选中InfoPlist.strings,在Xcode的File inspection(Xcode右侧文件检查器)中点击Localize,目的是选择我们需要本地化的语言,如下图:
弹框:
选中语言后:
勾选这需要支持的语言。
此时,Xcode左侧的InfoPlist.stirings左侧多了一个箭头,点击箭头可以展开,如下图所示:
语言配置完成了,接下来,我们分别用不同的语言给InfoPlist.strings下的文件设置对应的名字。
(1)在InfoPlist.strings(english)中加入如下代码:
// Localizable App Name是App在英语环境环境下显示的名称
CFBundleDisplayName = "Localizable App Name";
(2)在InfoPlist.strings(Chinese(Simplified))中加入如下代码
CFBundleDisplayName = "国际化App";
app名称国际化完成,语言设置为中文时,显示中文;语言设置英文时,显示英文
3 代码中字符串的本地化
3.1 创建Localizable.strings文件
字符本地化和App名称本地化过程如出一辙,只是创建的文件名成不一样(连同后缀一起,文件名必须是Localizable.strings),其他步骤完全相同。
3.2 字符串赋值
xcode左侧项目列表中出现不同语言下的Localizable.strings文件后,
在对应的文件中,分别以Key-Value的形式,为代码中每一个需要本地化的字符串赋值。
// Localizable.strings(English)
"content" = "line";
// Localizable.strings(chinese(Simplified))
"content" = "行";
// 代码中本地化
UITableViewCell *cell = [[UITableViewCell alloc] init];
NSString *str = NSLocalizedString(@"content", nil);
cell.textLabel.text = str;
备注:NSLocalizedString(key, comment)是Foundation框架自带的宏,程序运行时根据Key获取对应的字符串,然后赋值给代码中的字符串。
4 图片本地化
测试表明,如果图片名称为英文,无论中文还是英文环境下,图片都能正常显示,所以暂时没有对图片做任何配置
5 XIB和storyBoard本地化
5.1 Localize
选择要本地化的Storyboard或XIB,在File inspection中点击Localize,然后勾选需要支持的本地化语言。
5.1 修改对应的Key-Value
Xcode会自动为你生成对应的Key-Value,对应修改即可: