• iOS 的本地化 Localization


    基本本地化格式说明:

    /**/中间的是注释,value是key在相应语言环境下的显示值,以';'结尾.

    /* comment */
    "key" = "value";

    做本地化测试的时候最好把机器中的程序删除,工程clean,然后在改变语言环境再去测试。


    一.程序源文件
    1.在.m或.mm文件中使用的NSLocalizedString(<#key#>, <#comment#>) 对想要本地化的字符串标识.
    2.运行 

    genstrings -o target_dir/ src_dir/*.m

    target_dir是你想生成的对应的语言包文件夹比如 en.lproj,src_dir包含想本地化的源程序目录
    如果没有target_dir可能需要你先创建一个,执行无错误的化就会在src_dir内生成Localizable.strings文件
    3.把这个文件加到工程中,重复,就可以让程序的源文件支持多个语言版本.

    注意1:之后又修改了源文件,要继续添加本地化字符串可以给genstrings加上-a参数这样会把所有用到NSLocalizedString的key追加在后面,然后手工把之前有的删了就行;不加-a的话会重新生成一个,以前做好的对应字符也不存在了
    注意2:添加的时候最好确保一下程序中非语言包文件夹中没有Localizable.strings文件,最好不是拖拽式添加,而是用菜单选择式添加.如果你的Localizable.strings文件添加后没有如上图合成一个包的形式,那就需要从工程中删了重新添加.


    二.xib文件
    1.Xcode中选择文件,utilities面板的localization中添加想要的语言包。

    2.然后这个nib文件中有很多字符串,比如一个UILabel上显示的文字,我想提取出来让别人帮我翻译下,那就可以使用下面命令提取字符串:

    ibtool --generate-strings-file MainMenu.strings en.lproj/MainMenu.nib

    3.然后我拿到一个翻译好了的MainMenu.strings,想要根据这个文件来生成一个对应的nib文件,使用如下命令

      ibtool --strings-file de.lproj/MainMenu.strings --write de.lproj/MainMenu.nib en.lproj/MainMenu.nib

    注意:确保文件都存在,如果文件夹中没有这个MainMenu.strings,那么就是简单的复制一记。
    三.Info.plist文件
    每个程序的Info.plist都有个对应的InfoPlist.strings的文件。
    比较简介的添加本地化的方式是在Xcode中选择这个文件,打开utilities面板,在Localization那里添加想要的语言。

    另一种就是建自己想要的语言包文件夹,然后复制已经存在的InfoPlist.strings到这个文件夹中,在把这个文件加入工程中(不需要形成1中那样的包的形式)。


    下面两种都可以改变程序的显示名称:

    CFBundleDisplayName = "name";
    “CFBundleDisplayName” = "name";

    四.Setting.bundle
    Setting.bundle包中默认有一个en.lproj问价夹包含Root.string 对应的是默认的Root.plist的英语语言包。

    bundle中的plist中的Preference Items下面的每个item中的title或titles的值都是可以本地化的。

    把你要本地化的那个key按照标准格式写到list对应的.string文件中.把这个.string文件复制到各个语言包文件夹中,修改值.


    下面有个程序帮你提取list中的每个title和titles中的键值:bStrings.zip

    command: bStrings [-o out] [src] [-a]

    -o : 指明输出文件

    out: 如果是文件,所有plist中提取的字符串都将存放到这个文件中。

     如果是文件夹,每个plist的字符串提取到文件夹中对应的文件里面(对应的文件会自动创建)。 如果out地址不存在,则指向当前目录。 

    src 指向需要本地化的plist文件或存放这些plist文件的目录。不存在的话指向当前目录。

    -a: 追加模式,如果输出文件已经存在,那么新内容添加在结尾。否则就是清空在写。

    不能运行的话去这里看程序源码.

  • 相关阅读:
    Linux CAT与ECHO命令详解
    查看linux版本信息
    kubernetes(一)
    Chrome不安装插件实现页面长截图
    centos 升级glibc-2.17
    redis修改大key报Argument list too long的解决办法
    mysql打印用户权限的小技巧
    Centos6.5 自带的Python2.6.6 如何安装setuptools和pip
    TCP三次握手过程中涉及的队列知识的学习
    Docker volume权限导致的几个问题
  • 原文地址:https://www.cnblogs.com/v2m_/p/2298064.html
Copyright © 2020-2023  润新知