游戏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

大家有任何技术问题,请在以下留言,谢谢!

最新文章

  1. Yocto开发笔记之《串口驱动调试》(QQ交流群:519230208)
  2. java 堆栈
  3. java 四种内部类和内部接口
  4. Java 线程间通讯(共享变量方式)
  5. ubuntu14.04修复启动项
  6. 安装ipython notebook
  7. JQuery和UpdatePannel的问题
  8. jQuery慢慢啃之文档处理(五)
  9. libev源代码浅析
  10. Effective C++:条款38:通过一个复杂的模具has-a要么“基于一些实现”
  11. 第一次作业:来自一个奋斗的IT学子
  12. Dynamics CRM2013 sub grid中数据翻页问题
  13. Linux Socket I/O
  14. 2019OO第一单元总结
  15. REST(Representational state transfer)的四个级别以及HATEOAS介绍
  16. rpm 命令使用 和 lsof -p 1406 使用
  17. mysql_connect和mysql_pconnect区别
  18. EOJ Monthly 2018.11 猜价格 (模拟)
  19. 『IOS』&#160;遇到问题记录(长期更新)
  20. Day2 MySql函数以及单表查询

热门文章

  1. WARN Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect (org.apache.zookeeper.ClientCnxn)
  2. Vuejs实例-02Vue.js项目集成ElementUI
  3. Linux常用网络测试命令
  4. Jmeter Boss系统login
  5. Vue2.0 全家桶开发的网页应用(参照吾记APP)
  6. Promise (1) 初步接触
  7. 1089 Intervals(中文)
  8. int 与 int *
  9. 两强相争,鹿死谁手 — JQuery中的Ajax与AngularJS中的$http
  10. 设计模式的征途—8.桥接(Bridge)模式