前言
也可以关注我的个人博客
最近看了一下关于app本地化的一些尝试,这里做了一些最基础的总结。
大致分三点来介绍:
- Bundle display name的本地化
- StoryBoard的本地化
- app内字符串的本地化
Bundle display name的本地化
首先需要倒入需要的语言包,如下图所示:
其次新建一个名为InfoPlist.strings的文件,注意大小写:
点击这个文件右侧展开,点击localize…,把刚才添加的语言设置按需选择:
选择
在相应的strings文件里填写app不同语言的名称,分号千万不能漏掉,否则编译不通过。如果不知道字段的可以看下图:
英语语言下:
"CFBundleDisplayName" = "Tea tree mushroom";
简体中文语言下:
"CFBundleDisplayName" = "茶树菇";
日语语言下:
"CFBundleDisplayName" = "茶の木キノコ";
韩语语言下:
"CFBundleDisplayName" = "차 나무 菇";
StoryBoard的本地化
这个设置跟上面差不多,同样点击需要本地化的sb文件,点击localize…,选择好之后会出现相应的strings文件:
如果sb文件之前是有编辑过的,就是上面已经有显示控件的,生成string文件的时候会自动有 key-value的值,如下图:
如果在以后添加了新的控件,没有自动生成怎么办?别着急。咱们仔细看一下这个规则就知道了。首先打开sb文件显示xml代码:
这里搜到这个id对应的button,JNm-54-QzN.normalTitle拿到文字进行修改即可,下次新其他控件按照这个规则直接可以改,这里normalTitle等属性可以自行网上查到。
这里需要注意一点,如果是sb的约束可能需要注意不同语言文字的长度问题。
app内字符串的本地化
本地化的文件需要建一个名为Localizable.strings,注意大小写。同理需要选择右侧localize…,这里就不再啰嗦了。然后就可以用key-value的形式定义不同语言下的字符串,在需要使用的文件中利用:
public func NSLocalizedString(_ key: String, tableName: String? = default, bundle: Bundle = default, value: String = default, comment: String) -> String
读取字符串显示在相应的控件上。
这里总结了最基础的本地化需要的操作,如果有更高级的用法,欢迎大家一起分享。