今天公司要求国际化,搜了一些资料,觉得市面上的资料有些不够完整,这里我稍微整理一下,废话不说了,开始搞起
app名称国际化
- 打开project下的info文件 在Localizations里面添加语言,傻瓜式添加,选择你想要的语言,添加->完成
- 选中Info.plist,按下键盘上的command + N,选择Strings File(iOS->Resource->Strings File)
- 文件名字命名为InfoPlist,且必须是这个名字(因每个人电脑设置差异,此处本人电脑没有显示strings后缀名)然后创建文件
- 选中InfoPlist.strings,在Xcode的File inspection(Xcode右侧文件检查器)中点击Localize,目的是选择我们需要本地化的语言,如下图:
注意:在点击Localize之前,一定要保证我们已经添加了需要本地化的语言,也就是上面配置需要国际化的语言那一步(步骤:project->Info->Localizations,然后点击"+",添加需要国际化/本地化的语言)。
- 点击Localize后,会弹出一个对话框,展开对话框列表,发现下拉列表所展示的语言正是我们在上面配置的需要国际化的语言,选择我们需要本地化的语言,然后点击对话框的Localize按钮,如下图:
注意:如果我们没有在 PROJECT 中配置需要国际化的语言(project->Info->Localizations,然后点击"+"),上图下拉列表中将只会出现"Base"和"English"选项,English语言是系统默认的语言,其他需要国际化的语言(例如中文简体、法语)必须通过上面的配置本地化语言那一步手动添加。
- 然后我们发现Xcode右侧的File inspection变成了下图的样式:
- 接下来,勾选French、Chinese(zh-Hans)、Chinese(zh-Hant)、Korean,如下图:
- 接下来,我们分别用不同的语言给InfoPlist.strings下的文件设置对应的名字。
(1)在InfoPlist.strings(english)中加入如下代码:
CFBundleDisplayName = "Language internationalization";
(2)在InfoPlist.strings(French)中加入如下代码:
CFBundleDisplayName = "Langue internationale";
(3)在InfoPlist.strings(Chinese(Simplified))中加入如下代码:
CFBundleDisplayName = "语言国际化";
(4)在InfoPlist.strings(Chinese(Traditional))中加入如下代码:
CFBundleDisplayName = "語言國際化";
(5)在InfoPlist.strings(Korean)中加入如下代码:
CFBundleDisplayName = "언어 국제화";
然后修改模拟器语言运行,会发现app名称改变
代码国际化
- 和应用名称国际化一样,首先需要command + N,选择iOS -> Resource -> Strings File
- 文件名必须命名为Localizable
- 然后按照上面步骤再一次设置Localizable.strings
- 接下来,我们分别用不同的语言给InfoPlist.strings下的文件设置对应的名字。
(1)在InfoPlist.strings(english)中加入如下代码:
CFBundleDisplayName = "Mischievous";
(2)在InfoPlist.strings(French)中加入如下代码:
CFBundleDisplayName = "Vilain";
(3)在InfoPlist.strings(Chinese(Simplified))中加入如下代码:
CFBundleDisplayName = "调皮捣蛋";
(4)在InfoPlist.strings(Chinese(Traditional))中加入如下代码:
CFBundleDisplayName = "調皮搗蛋";
(5)在InfoPlist.strings(Korean)中加入如下代码:
CFBundleDisplayName = "장난을 치다";
- 我们只需要使用Foundation框架自带的NSLocalizedString(key, comment)这个宏根据Key获取对应的字符串,然后赋值给代码中的字符串
// NSLocalizedString(key, comment) 本质
// NSlocalizeString 第一个参数是内容,根据第一个参数去对应语言的文件中取对应的字符串,第二个参数将会转化为字符串文件里的注释,可以传nil,也可以传空字符串@""。
#define NSLocalizedString(key, comment) [[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]
- 然后修改模拟器语言运行
结束语
到这里就结束了,如若不懂的话可以👇留言,也可以加入群讨论
喜欢的话 记得关注、收藏、点赞哟