iOS app 国际化方案

开门见山,国际化有两种方式, 第一种是自己手动创建国际化的各种文件, 此方法的灵活, 容易维护.第二种方式是app完成之后使用xcode导出国际化模板, 然后编辑模板, 此方法的方便, 快捷. 缺点就是如果xib 布局中添加或者删除控件需要重新导出一套模板,然后在编辑.

首先看看第一种方式:

应用名称国际化

> 步骤:

1.在project中添加需要支持的语言如下图

图片1

2.新建一个 InfoPlist.strings 文件, 点击属性栏中的Localize按钮,如下图

图片1

3.在属性栏中勾选需要国际化的语言, 这里的语言就是步骤一中设置的语言, 如下图

图片1

4.此时, InfoPlist.strings 文件会变成一个组, 分别对应国际化的语言, 然后在里面写需要国际化的内容

图片1

5.里面的内容如下, 左边是中文, 右边是英文

图片1

字符串国际化

和app名称的国际化一样, 新建一个 Localizable.strings 文件, 然后选择语言, 以 “key” = “value”; 的方式书写需要国际化的内容(“;”不能省略,否则编译报错).

图片国际化

有两种方法:

方法一: 通过国际化字符串给不同语言下的图片加不同的后缀, 然后通过判断语言, 拼接图片名字符串.

方法二:使用原生支持的图片国际化方案: 如下

> 步骤

1.将图片拖入工程中(以 icon.png 为例), 选中icon.png点击属性栏中的Localize按钮,并选择对应的国际化语言(这里以英文为例), 如下图:

图片1

2.右键icon.png -> show in finder 可以看见在en.Iproj文件夹中有icon.png, 说明icon.png的英文国际化成功, 如下图

图片1

3.将需要在其他语种显示的图片拖入对应的国际化文件夹中(和en.Iproj对应英文一样, zh-Hans.Iproj对应中文),并将其名称改为和其他文件夹相同(这里以icon.png为例, 所以将zh-Hans.Iproj文件夹中对应图片改为icon.png), 然后将zh-Hans.Iproj文件夹中icon.png拖入工程, 此时, 工程中 icon.png会变成一个组,包含中文和英文分别对应的图片, 如下图

图片1

4.最后在 copy bundle resources 中添加 icon.png 文件到boundle中, 然后使用如下方法就可以在不同语言下显示不同的图片 imageView.image = UIImage(named: "icon.png")

storyBoard & Xib国际化

xib和storyBoard的国际化方法相同.有两种方法可以使用.

方法一:

  • 选中需要国际化的xib或者storyBoard, 点击Localize按钮, 然后选择对应的语言
  • 选择完语言之后, Localization条目会变出如下图所示, 每种语言后面都有一个下拉框, 点击之后会有两个选项, 分别是两种国际化的方法, 方法一我们选择第一项, Interface Builder Storyboard.

图片1

  • 你会发现, 使用第一项选中对少中语言会出现多少个Storyboard, 其中Base, 是公共的部分如下图

图片1

  • 你可以在不同语言给Storyboard做不同的界面

以上就是app国际化的第一套整体方案, 以及各个细节的实现, 接下来介绍第二种方案:

  • 选择如下图的第二个项目.

图片1

  • 工程结构如下图所示

图片1

  • 在英文的.strings 文件中会自动生成界面对应的控件的键值对, 如下图

图片1

总结:

  • 方法一需要维护多个Storyboard,工作量大, 但是可以让每个Storyboard显示完全不同的界面
  • 方法二只需要维护一个Storyboard, 工作量小, 但是每种语言下的Storyboard的界面要一样, (布局可以不一样), 然后通过strings文件给每种语言配置不一样的内容

启动图国际化

> 步骤

  • 1.找到 UILaunchStoryboardName 这个键, 寻找方法如下(如果没有就手动添加):

图片1

  • 2.新建两个LaunchScreen文件, 分别叫做 LaunchScreen-Chinese , LaunchScreen-English, 分别对应中文和应为状态下的启动页面

  • 3.在上面新建的 InfoPlist.strings(上面修改app名称时创建的, 如果没有就自己创建) 中分别添加如下代码(左边是中文启动图, 右边是英文启动图):

图片1

注意: 此方法国际化启动图只要用户首次或者重新安装app时才生效, 只切换语言不会生效

第二种方式如下:

  • 项目编写的时候所有需要国际化的字符串都要使用 NSLocalizedString 封装. 因为只要使用 NSLocalizedString 封装的字符串会在导出国际化模板的时候自动生成键值对
  • 给项目添加需要国际化的语言, 和上面的添加方法一样.
  • 导出国际化模板, 如下图

图片1

  • 导出后的目录结构如下 (使用mac下载 IXLIFFTOOL工具可以方便编辑), ja.xliff是对应的日文, zh-Hans.xliff对应简体中文

图片1

  • 打开对应的xliff文件进行对应的国际化字符串的编辑即可

  • 图片的国际化不能使用模板导出, 所以图片的国际化和上面介绍的方法一样

tips

  1. 没有放在Assets中的图片, 不能直接通过storyBoard给imageView设置图片, 设置了页不会显示
  2. iOS 保持界面流畅的技巧
  3. 深入理解runloop
  4. xcode预览ib或者storyboard的方法, 可以添加不同的设备进行预览.但是预览不是百分之百准确, 指示作为参考, 预览开启的方式如下.

    • 点击assist edit按钮(2个圆圈那个按钮)

图片1

1
*	点击aotomatic按钮

图片1

1
*	选择preview, 就会出现预览图

图片1

1
*	点击加号添加预览的设备

图片1

第三方库

  1. FPS 指示器
  2. facebook开发的帮助ios流畅
  3. tableView预排版,提高性能demo
  4. 行TableView流畅度优化

技术博客

  1. ios技术博客