iOS国际化相对来说🍎已经做得比较成熟了,也提供了一系列的机制。国际化主要需要几种情况:Storyboard、代码文本替换、app名称替换、图片替换。
Storyboard
Storyboard本身就支持多语言,只需要在工程中配置一下就可以了。
配置完,Storyboard下就会多出几个语言配置的文件。这些多语言文件可以设置两种模式,一种是视图模式,一种是字符串模式。
我推荐采用默认的字符串模式,这样可以通过脚本自动替换字符串。
字符串存储格式如下:
/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "VLj-Y4-L2c"; */
"VLj-Y4-L2c.normalTitle" = "Bn";
第一行是注释,分别是控件类型、字符串属性、控件ID。第二行等号左边是控件ID对应的字符串属性,等号右边是字符串内容。
⚠️新添加的控件,需要手动去更新语言配置文件。
查看控件ID如下图所示:
有时候语言配置文件不会生效,需要重新生成一下。但是重新生成的文件的多语言配置就没有了。
重新生成多语言文件命令:
cd /Users/Jimmy/Projects/HelloWorld/HelloWorld/Base.lproj
ibtool Main.storyboard --generate-strings-file Main.strings
基本多语言文件生效后,将要翻译的内容填写到对应的文件里就可以了。也可以通过Python脚本做字符串替换。
代码文本替换
新建一个String File,文件名为Localisable.strings,不为这个文件名就无法生效,貌似也没找到地方设置这个文件名。
Localisable.strings文件设置好后,文件内容就是一个key值对应一个value值。
"Key" = "Value";
Key是需要国际化的字符串的key,Value是国际化之后显示的值。
开发代码中实现国际化,使用方法NSLocalizedString(str,nil)。可以通过String的扩展或者宏来简化实现该方法。
App名称替换
app名称替换类似代码文本替换,但有点区别。
app名称替换首先需要建立InfoPlist.strings文件。
替换app名称key值为CFBundleDisplayName。
CFBundleDisplayName = "AppName"