游戲UI框架設計(7)
--資源國際化技術
說起“資源國際化”技術,個人認為可以追述到微軟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 文件代碼:
/*** * * 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
大家有任何技術問題,請在以下留言,謝謝!