iOS 国际化方案

作者: heron_funny | 来源:发表于2019-07-02 10:46 被阅读24次
    app-international-14.png

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

    应用名称国际化

    步骤:

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

    app-international-01.png

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

    app-international-02.png

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

    app-international-03.png

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

    app-international-04.png

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

    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.png

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

    app-international-07.png

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

    app-international-08.png

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

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

    方法一:

    • 选中需要国际化的xib或者storyBoard, 点击Localize按钮, 然后选择对应的语言
    • 选择完语言之后, Localization条目会变出如下图所示, 每种语言后面都有一个下拉框, 点击之后会有两个选项, 分别是两种国际化的方法, 方法一我们选择第一项, Interface Builder Storyboard.
    app-international-09.png
    • 你会发现, 使用第一项选中对少中语言会出现多少个Storyboard, 其中Base, 是公共的部分如下图
    app-international-10.png
    • 你可以在不同语言给Storyboard做不同的界面

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

    • 选择如下图的第二个项目.
    app-international-11.png
    • 工程结构如下图所示
    app-international-12.png
    • 在英文的.strings 文件中会自动生成界面对应的控件的键值对, 如下图
    app-international-13.png
    总结:
    • 方法一需要维护多个Storyboard,工作量大, 但是可以让每个Storyboard显示完全不同的界面
    • 方法二只需要维护一个Storyboard, 工作量小, 但是每种语言下的Storyboard的界面要一样, (布局可以不一样), 然后通过strings文件给每种语言配置不一样的内容

    启动图国际化
    步骤

    • 1.找到 UILaunchStoryboardName 这个键, 寻找方法如下(如果没有就手动添加):
    app-international-20.png
    • 2.新建两个LaunchScreen文件, 分别叫做 LaunchScreen-Chinese , LaunchScreen-English, 分别对应中文和应为状态下的启动页面

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

    app-international-21.png

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

    <b style="color : red">第二种方式如下:</b>

    • 项目编写的时候所有需要国际化的字符串都要使用 NSLocalizedString 封装. 因为只要使用 NSLocalizedString 封装的字符串会在导出国际化模板的时候自动生成键值对
    • 给项目添加需要国际化的语言, 和上面的添加方法一样.
    • 导出国际化模板, 如下图
    app-international-14.png
    • 导出后的目录结构如下 (使用mac下载 IXLIFFTOOL工具可以方便编辑), ja.xliff是对应的日文, zh-Hans.xliff对应简体中文
    app-international-15.png
    • 打开对应的xliff文件进行对应的国际化字符串的编辑即可

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

    tips

    1. 没有放在Assets中的图片, 不能直接通过storyBoard给imageView设置图片, 设置了页不会显示
    2. iOS 保持界面流畅的技巧
    3. 深入理解runloop
    4. xcode预览ib或者storyboard的方法, 可以添加不同的设备进行预览.但是预览不是百分之百准确, 指示作为参考, 预览开启的方式如下.
    • 点击assist edit按钮(2个圆圈那个按钮)
    app-international-16.png
    • 点击aotomatic按钮
    app-international-17.png
    • 选择preview, 就会出现预览图
    app-international-18.png
    • 点击加号添加预览的设备
    app-international-19.png

    第三方库

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

    技术博客

    1. ios技术博客

    相关文章

      网友评论

        本文标题:iOS 国际化方案

        本文链接:https://www.haomeiwen.com/subject/jfzacctx.html