1. 程式人生 > >遊戲UI框架設計(7): 資源國際化技術

遊戲UI框架設計(7): 資源國際化技術

我們 客戶 value json 查詢 ons bug emp pty

遊戲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框架項目,特提供源碼下載鏈接:http://pan.baidu.com/s/1jIgLfBg 密碼:43e7

大家有任何技術問題,請在以下留言,謝謝!

遊戲UI框架設計(7): 資源國際化技術