iOS 国际化方案
开门见山,国际化有两种方式, 第一种是自己手动创建国际化的各种文件, 此方法的灵活, 容易维护.第二种方式是app完成之后使用xcode导出国际化模板, 然后编辑模板, 此方法的方便, 快捷. 缺点就是如果xib 布局中添加或者删除控件需要重新导出一套模板,然后在编辑.
应用名称国际化
步骤:
1.在project中添加需要支持的语言如下图
app-international-01.png2.新建一个 InfoPlist.strings 文件, 点击属性栏中的Localize按钮,如下图
app-international-02.png3.在属性栏中勾选需要国际化的语言, 这里的语言就是步骤一中设置的语言, 如下图
app-international-03.png4.此时, InfoPlist.strings 文件会变成一个组, 分别对应国际化的语言, 然后在里面写需要国际化的内容
app-international-04.png5.里面的内容如下, 左边是中文, 右边是英文
app-international-05.png字符串国际化
和app名称的国际化一样, 新建一个 <b style="color:red"> Localizable.strings </b>文件, 然后选择语言, 以<b style="color:red"> "key" = "value";</b> 的方式书写需要国际化的内容(";"不能省略,否则编译报错).
图片国际化
有两种方法:
方法一: 通过国际化字符串给不同语言下的图片加不同的后缀, 然后通过判断语言, 拼接图片名字符串.
方法二:使用原生支持的图片国际化方案: 如下
步骤:
1.将图片拖入工程中(以 icon.png 为例), 选中icon.png点击属性栏中的Localize按钮,并选择对应的国际化语言(这里以英文为例), 如下图:
app-international-06.png2.右键icon.png -> show in finder 可以看见在en.Iproj文件夹中有icon.png, 说明icon.png的英文国际化成功, 如下图
app-international-07.png3.将需要在其他语种显示的图片拖入对应的国际化文件夹中(和en.Iproj对应英文一样, zh-Hans.Iproj对应中文),并将其名称改为和其他文件夹相同(这里以icon.png为例, 所以将zh-Hans.Iproj文件夹中对应图片改为icon.png), 然后将zh-Hans.Iproj文件夹中icon.png拖入工程, 此时, 工程中 icon.png会变成一个组,包含中文和英文分别对应的图片, 如下图
app-international-08.png4.最后在 copy bundle resources 中添加 icon.png 文件到boundle中, 然后使用如下方法就可以在不同语言下显示不同的图片 imageView.image = UIImage(named: "icon.png")
StoryBoard & Xib国际化
xib和storyBoard的国际化方法相同.有两种方法可以使用.
方法一:
- 选中需要国际化的xib或者storyBoard, 点击Localize按钮, 然后选择对应的语言
- 选择完语言之后, Localization条目会变出如下图所示, 每种语言后面都有一个下拉框, 点击之后会有两个选项, 分别是两种国际化的方法, 方法一我们选择第一项, Interface Builder Storyboard.
- 你会发现, 使用第一项选中对少中语言会出现多少个Storyboard, 其中Base, 是公共的部分如下图
- 你可以在不同语言给Storyboard做不同的界面
以上就是app国际化的第一套整体方案, 以及各个细节的实现, 接下来介绍第二种方案:
- 选择如下图的第二个项目.
- 工程结构如下图所示
- 在英文的.strings 文件中会自动生成界面对应的控件的键值对, 如下图
总结:
- 方法一需要维护多个Storyboard,工作量大, 但是可以让每个Storyboard显示完全不同的界面
- 方法二只需要维护一个Storyboard, 工作量小, 但是每种语言下的Storyboard的界面要一样, (布局可以不一样), 然后通过strings文件给每种语言配置不一样的内容
启动图国际化
步骤
- 1.找到 UILaunchStoryboardName 这个键, 寻找方法如下(如果没有就手动添加):
-
2.新建两个LaunchScreen文件, 分别叫做 LaunchScreen-Chinese , LaunchScreen-English, 分别对应中文和应为状态下的启动页面
-
3.在上面新建的 InfoPlist.strings(上面修改app名称时创建的, 如果没有就自己创建) 中分别添加如下代码(左边是中文启动图, 右边是英文启动图):
<b style="color:green">注意: 此方法国际化启动图只要用户首次或者重新安装app时才生效, 只切换语言不会生效</b>
<b style="color : red">第二种方式如下:</b>
- 项目编写的时候所有需要国际化的字符串都要使用
NSLocalizedString
封装. 因为只要使用NSLocalizedString
封装的字符串会在导出国际化模板的时候自动生成键值对 - 给项目添加需要国际化的语言, 和上面的添加方法一样.
- 导出国际化模板, 如下图
- 导出后的目录结构如下 (使用mac下载 IXLIFFTOOL工具可以方便编辑), ja.xliff是对应的日文, zh-Hans.xliff对应简体中文
-
打开对应的xliff文件进行对应的国际化字符串的编辑即可
-
图片的国际化不能使用模板导出, 所以图片的国际化和上面介绍的方法一样
tips
- 没有放在Assets中的图片, 不能直接通过storyBoard给imageView设置图片, 设置了页不会显示
- iOS 保持界面流畅的技巧
- 深入理解runloop
- xcode预览ib或者storyboard的方法, 可以添加不同的设备进行预览.但是预览不是百分之百准确, 指示作为参考, 预览开启的方式如下.
- 点击assist edit按钮(2个圆圈那个按钮)
- 点击aotomatic按钮
- 选择preview, 就会出现预览图
- 点击加号添加预览的设备