最近我们的iOS工程需要搞国际化,查资料学习,静下心思考最后完成这份方案。这份方案是为了先解决我司当前需求,肯定不是最完美的,抛砖引玉,欢迎大家提出建议,为开源社会出一份力。
先别BB那么多,搜这个问题的人肯定都是着急解决问题,我们先说怎么用,原理啥的感兴趣后面再说!
1. pod 引入MultiLanguage
pod 'MultiLanguage'
2. 引入头文件
//全局引入 ,原因是有两个分类需要在全局生效
import <MultiLanguage/Multi_language.h>
2. 设置当前语言类型、添加映射文件路径
//可动态设置,更改languageType后新建的页面会更新语言
LanguageManager.languageType = @"en_GB";
//a. addMulitLanguageJsonFilePath: 最好是在main.m 中UIApplicationMain 函数调用之前调用
//b. 因为xib或sb中控件的多语言是在创建完成后开始,这时如果还未添加映射表,则会出现进入第一屏没有替换对应语言的问题
//c. b中描述的机制,可用在组件化的工程中。当组件未启动时,并不需要加载映射表。合理占用内存,当组件需要启动前,加载即可。(后期是否需要加入删除机制,我准备使用一段时间后再评估)
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"multi-language" ofType:@"json"];
[LanguageManager addMulitLanguageJsonFilePath:filePath];
3. 运行过滤脚本 (组件内脚本需要python版本: #!/usr/bin/python3 ,请自行升级或安装)
将MultiLanguage/Resources/Config.plist文件夹下的 RunFilterScript 字段设为YES,command +B 会弹出目录选择,选择你要处理的文件夹。脚本运行后在会在桌面生成multi-language.csv表格。将表格拿去给翻译人员翻译。
表格内目前是四列分别为 key , zh_CN , en_GB , ja_JP,如有扩展,自行更改firstScript.py脚本即可。
3. multi-language.csv翻译完成后,运行转换脚本
将MultiLanguage/Resources/Config.plist文件夹下的 RunScvToJsonScScript 字段设为YES,command +B ,选择对应csv文件转换后,在桌面生成multi-language.json文件,将multi-language.json文件拖入主工程即可完成全部多语言配置。
4. 几点说明
1.平时需要RunFilterScript和RunScvToJsonScScript字段设置为NO,这样便不会执行python脚本。
2.为什么不直接生成和翻译json文件?我们产品要求导出格式为表格,有其他格式需求可自行更改脚本。
3.为什么不在脚本中使用google、百度、有道自动翻译?因为自动翻译目前不够信、达、雅。如果有需要的小伙伴,可自行编辑脚本。
4.在Xcode的buildLog中可以查看此组件运行的log 。如下图所示:
5.github链接,欢迎大家提出改进建议,使iOS项目国际化更加方便。
6.大家若有好的想法或者集成上的问题可以在评论区交流