本文设计到的本地化,均来自自己实践, 在此做个笔记,方便自己复习也方便他人学习.
在iOS中涉及到本地化的场景主要有以下几种:
1> app 中内容(图片/文字)的本地化
2> 系统配置文字本地化(后面补写)
3> 启动图片本地化(后面补写)
4> xib / storyboard 本地化(后面补写)
5> 强制默认 某种语言 (后面补写)
6> 批量生成 本地化键值对文件,供翻译人员翻译
一、 app 中内容(图片/文字)的本地化
1、 让app 支持多国语言
PROJECT->Info->Localizations中点击下方的小->“+”
添加需要添加的语言,本文中以简体中文和英文为例。(国际化的所有操作,都需要这一步作为前提。)
2、 创建本地化文件
Snip20181228_5.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 文件是错误的):
- 当app 支持本地化后, app 会去手机的
语言与地区
查找当前的首选语言:简体中文, 英文, 日文...
- 当app 支持本地化后, app 会去手机的
- 根据查找的首选列表中的语言 匹配app 中的本地化文件, 如果首选语言中第一个就匹配上对应的文件,
则根据之前的 key 来查找对应的本地化字符串,找到了就用找到的值,找不到就用默认的值(一般就是key值).
- 根据查找的首选列表中的语言 匹配app 中的本地化文件, 如果首选语言中第一个就匹配上对应的文件,
- 如果第一个语言没有匹配上本地化文件就挨着挨着匹配,第二个, 第三个,以此类推的匹配本地文件直到匹配上.
-
4.如果所有的 '首选语言' 都没匹配上就查看 app 中infoplist的
CFBundleDevelopmentRegion
对应的值(en / zh-Hans ...) 来匹配本地文件
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
网友评论