遊戲UI框架設計(7)windows
--資源國際化技術緩存
提及「資源國際化」技術,我的認爲能夠追述到微軟Window2000 PC操做系統的發佈,在這以前windows98操做系統的開發都是先由美國總部出一個英文版本,而後在發佈windows 版本以後的大約一年後,全世界其餘語言版本的操做系統才能面世。 在這一年中,就是微軟駐各個國家分公司的多語言版本的翻譯工做,須要從操做系統的核心到外圍軟件,所有翻譯爲所在國家語言,不留死角。
這種狀況對於微軟來講須要爲多語言版本付出額外很是大的經濟負擔,聽說2000年前微軟從事多語言翻譯的研發人員就多達300多人。 可是這個情況到了Window2000的發佈,好像就能夠作到全世界版本的同步發佈,直到目前最新的Win10系統。這些變化就是Win2000的開發從一開始採用了「資源國際化」技術,來加速多語言版本的發佈。
不只遊戲行業,其實全部的IT研發行業也都存在多語言、多資源(圖片、音頻)等,資源國際化技術問題。這裏我的僅僅從本遊戲UI框架設計角度出發,設計一套很是簡潔易懂的語言國際化策略,以供參考。
多語言版本的實現,最基本的原理就是根據ID去讀取語言配置表,不一樣的語言新建一個語言配置表。如下是用Json 作的語言配置表:框架
關於什麼是Json 、若是讀取Json 配置表等技術,請讀者查看本UI框架系列博客的「遊戲UI框架設計(五): 配置管理與應用」。
筆者在這裏定義了一個語言管理器(LanguageMgr)類,系統框架啓動後,按照默認規則從Json 配置文件讀取「鍵值對」,存儲到LanguageMgr類的一個「字典類「中。而後應用此UI框架的客戶端程序,根據一個ID號經過LanguageMgr類的一個靜態方法,查找到須要輸出的文字內容。如下是LanguageMgr.cs 文件代碼:spa
/*** * * Title: "SUIFW" UI框架項目 * 主題: 語言國際化 * Description: * 功能: 使得咱們發佈的遊戲,能夠根據不一樣的國家,顯示不一樣的語言信息。 * * Date: 2017 * Version: 0.1版本 * Modify Recoder: * * */ using System.Collections; using System.Collections.Generic; using UnityEngine; namespace SUIFW { public class LauguageMgr { //本類實例 public static LauguageMgr _Instance; //語言翻譯的緩存集合 private Dictionary<string, string> _DicLauguageCache; private LauguageMgr() { _DicLauguageCache=new Dictionary<string, string>(); //初始化語言緩存集合 InitLauguageCache(); } /// <summary> /// 獲得本類實例 /// </summary> /// <returns></returns> public static LauguageMgr GetInstance() { if(_Instance==null) { _Instance=new LauguageMgr(); } return _Instance; } /// <summary> /// 到顯示文本信息 /// </summary> /// <param name="lauguageID">語言的ID</param> /// <returns></returns> public string ShowText(string lauguageID) { string strQueryResult = string.Empty; //查詢結果 //參數檢查 if (string.IsNullOrEmpty(lauguageID)) return null; //查詢處理 if (_DicLauguageCache != null && _DicLauguageCache.Count>=1) { _DicLauguageCache.TryGetValue(lauguageID, out strQueryResult); if (!string.IsNullOrEmpty(strQueryResult)) { return strQueryResult; } } Debug.Log(GetType() + "/ShowText()/ Query is Null! Parameter lauguageID: " + lauguageID); return null; } /// <summary> /// 初始化語言緩存集合 /// </summary> private void InitLauguageCache() { IConfigManager config = new ConfigManagerByJson("LauguageJSONConfig"); if (config!=null) { _DicLauguageCache = config.AppSetting; } } } }
以上原理說明白後,具體的客戶端程序能夠經過改變Json配置文件,動態的改變UI界面文字語言。調用效果以下圖:操作系統
好了,到此本系列博客的最後一篇終於寫完了,爲了廣大讀者更好地理解本UI框架項目,特提供源碼下載連接:https://pan.baidu.com/s/1eTA8rHS 密碼:4x6e
你們有任何技術問題,請在如下留言,謝謝!翻譯