美文网首页
iOS 本地化总结

iOS 本地化总结

作者: Rui哥 | 来源:发表于2018-12-28 16:07 被阅读15次

    本文设计到的本地化,均来自自己实践, 在此做个笔记,方便自己复习也方便他人学习.

    在iOS中涉及到本地化的场景主要有以下几种:

    1> app 中内容(图片/文字)的本地化
    2> 系统配置文字本地化(后面补写)
    3> 启动图片本地化(后面补写)
    4> xib / storyboard 本地化(后面补写)
    5> 强制默认 某种语言 (后面补写)
    6> 批量生成 本地化键值对文件,供翻译人员翻译




    一、 app 中内容(图片/文字)的本地化

    1、 让app 支持多国语言
    PROJECT->Info->Localizations中点击下方的小->“+” 添加需要添加的语言,本文中以简体中文和英文为例。(国际化的所有操作,都需要这一步作为前提。)

    Snip20181228_1.png

    2、 创建本地化文件

    Snip20181228_4.png


    Snip20181228_5.png



    Snip20181228_6.png

    3、本地化使用

    NSString *key = @"Cancle";
        NSString *tableName = @"Localization";
        NSString *describe = @"按钮的标题";
        
        
        
        // 方式1:
        // 在名称为 tableName 的本地化文件中, 去查找 key 对应的文字
        // 当在对应文件中没找到 key 对应的文字时, 默认值就是 key
        // describe 是对 key 对应的文字的描述, 便于翻译人员理解含义,给出正确的翻译
        // 当 tableName 为nil 时, 会自动的去 名为Localization 的本地化文件中查找对应的文字
        NSString *localStr =  NSLocalizedStringFromTable(key, tableName, describe);
        NSLog(@"localStr : %@",localStr);
        
        
        // 方式2:
        NSBundle *bundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"zh-Hans" ofType:@"lproj"]];
        // 在bundle 中的, 名为tableName的本地化文件, 中去查找key对应的本地化文字
        NSString *localStr2 = NSLocalizedStringFromTableInBundle(key, tableName, bundle, describe);
        NSLog(@"localStr2 : %@",localStr2);
    

    4、本地化匹配原理,经过测试得出以下结论(实际上网上有说没有的语言默认使用base 文件是错误的):

      1. 当app 支持本地化后, app 会去手机的 语言与地区 查找当前的首选语言: 简体中文, 英文, 日文...
      1. 根据查找的首选列表中的语言 匹配app 中的本地化文件, 如果首选语言中第一个就匹配上对应的文件,
        则根据之前的 key 来查找对应的本地化字符串,找到了就用找到的值,找不到就用默认的值(一般就是key值).
      1. 如果第一个语言没有匹配上本地化文件就挨着挨着匹配,第二个, 第三个,以此类推的匹配本地文件直到匹配上.
    • 4.如果所有的 '首选语言' 都没匹配上就查看 app 中infoplist的 CFBundleDevelopmentRegion 对应的值(en / zh-Hans ...) 来匹配本地文件

    Snip20181228_7.png



    Snip20181228_9.png

    6、批量生成 本地化键值对文件,供翻译人员翻译

    方式1:

    根据 xxx.m  yyy.m 中的key 和 解释, 自动生成本地化键值对
    genstrings  xxx.m  yyy.m
    

    方式2: 文件批量化生成指令

    find . \( -name '*.m' -o -name '*.h' \) -print0 | xargs -0 genstrings -o en.lproj
    
    // 注意:en.lproj 是导出的目标文件夹, 在执行命令前必须要有, 也可以是其他的名字
    find . \( -name '*.m' -o -name '*.h' \) -print0 | xargs -0 genstrings -o locOutput
    

    参看文件:
    https://www.cnblogs.com/yanzheng216/p/8674722.html
    https://www.jianshu.com/p/f8edd7b7a217

    相关文章

      网友评论

          本文标题:iOS 本地化总结

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