iOS App国际化与本地化,让你的app同时支持多国语言

前言

也可以关注我的个人博客

  最近看了一下关于app本地化的一些尝试,这里做了一些最基础的总结。
  大致分三点来介绍:

  • Bundle display name的本地化
  • StoryBoard的本地化
  • app内字符串的本地化

Bundle display name的本地化

首先需要倒入需要的语言包,如下图所示:

导入语言

其次新建一个名为InfoPlist.strings的文件,注意大小写:

新建InfoPlist

点击这个文件右侧展开,点击localize…,把刚才添加的语言设置按需选择:

点击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

读取字符串显示在相应的控件上。

这里总结了最基础的本地化需要的操作,如果有更高级的用法,欢迎大家一起分享。

你可能感兴趣的:(iOS App国际化与本地化,让你的app同时支持多国语言)