??最近我們的iOS工程需要搞國際化,查資料學(xué)習(xí)咖杂,靜下心思考最后完成這份方案。這份方案是為了先解決我司當(dāng)前需求蚊夫,肯定不是最完美的诉字,拋磚引玉,歡迎大家提出建議知纷,為開源社會出一份力壤圃。
??先別BB那么多,搜這個問題的人肯定都是著急解決問題琅轧,我們先說怎么用伍绳,原理啥的感興趣后面再說!
1. pod 引入MultiLanguage
pod 'MultiLanguage'
2. 引入頭文件
//全局引入 乍桂,原因是有兩個分類需要在全局生效
import <MultiLanguage/Multi_language.h>
2. 設(shè)置當(dāng)前語言類型冲杀、添加映射文件路徑
//可動態(tài)設(shè)置,更改languageType后新建的頁面會更新語言
LanguageManager.languageType = @"en_GB";
//a. addMulitLanguageJsonFilePath: 最好是在main.m 中UIApplicationMain 函數(shù)調(diào)用之前調(diào)用
//b. 因為xib或sb中控件的多語言是在創(chuàng)建完成后開始,這時如果還未添加映射表睹酌,則會出現(xiàn)進(jìn)入第一屏沒有替換對應(yīng)語言的問題
//c. b中描述的機(jī)制权谁,可用在組件化的工程中。當(dāng)組件未啟動時忍疾,并不需要加載映射表闯传。合理占用內(nèi)存谨朝,當(dāng)組件需要啟動前卤妒,加載即可。(后期是否需要加入刪除機(jī)制字币,我準(zhǔn)備使用一段時間后再評估)
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"multi-language" ofType:@"json"];
[LanguageManager addMulitLanguageJsonFilePath:filePath];
3. 運(yùn)行過濾腳本 (組件內(nèi)腳本需要python版本: #!/usr/bin/python3 则披,請自行升級或安裝)
??將MultiLanguage/Resources/Config.plist文件夾下的 RunFilterScript 字段設(shè)為YES,command +B 會彈出目錄選擇洗出,選擇你要處理的文件夾士复。腳本運(yùn)行后在會在桌面生成multi-language.csv表格。將表格拿去給翻譯人員翻譯。
??表格內(nèi)目前是四列分別為 key , zh_CN , en_GB , ja_JP阱洪,如有擴(kuò)展便贵,自行更改firstScript.py腳本即可。
3. multi-language.csv翻譯完成后冗荸,運(yùn)行轉(zhuǎn)換腳本
??將MultiLanguage/Resources/Config.plist文件夾下的 RunScvToJsonScScript 字段設(shè)為YES承璃,command +B ,選擇對應(yīng)csv文件轉(zhuǎn)換后,在桌面生成multi-language.json文件蚌本,將multi-language.json文件拖入主工程即可完成全部多語言配置盔粹。
4. 幾點說明
??1.平時需要RunFilterScript和RunScvToJsonScScript字段設(shè)置為NO,這樣便不會執(zhí)行python腳本程癌。
??2.為什么不直接生成和翻譯json文件舷嗡?我們產(chǎn)品要求導(dǎo)出格式為表格,有其他格式需求可自行更改腳本嵌莉。
??3.為什么不在腳本中使用google进萄、百度、有道自動翻譯烦秩?因為自動翻譯目前不夠信垮斯、達(dá)、雅只祠。如果有需要的小伙伴兜蠕,可自行編輯腳本。
??4.在Xcode的buildLog中可以查看此組件運(yùn)行的log 抛寝。如下圖所示:
??5.github鏈接熊杨,歡迎大家提出改進(jìn)建議,使iOS項目國際化更加方便盗舰。
??6.大家若有好的想法或者集成上的問題可以在評論區(qū)交流