天天飞车国际化方案

1、概述
天天飞车基于Unity3D引擎开发,UI插件使用的是NGUI,所以此方案适用范围为Unity3D+NGUI开发的项目,其他项目国际化也可以作为参考。
2、编码方案
由于是unity项目,统一采用c#的string类对字符串进行处理,string就是Unicode编码。外部文本统一采用UTF-8编码存储。
3、文字
3.1 硬编码文字国际化方案
对于项目中有硬编码字符的地方,进行改造。提供统一的存储、加载、索引方式。
实现步骤如下:

1、所有的硬编码字符抽取到文本文件中,并赋予唯一标识,天天飞车的字符唯一标识使用字符串。文本文件采用UTF-8格式存储。示例如下:
文本文件
字符唯一标识使用字符串

2、实现工具类Localization,该类负责加载对应语言的文本文件,并提供查询接口。

public string Get (string key)
{
      string val;
      return (mDictionary.TryGetValue(key, out val)) ? val : key;
}

3、之前硬编码的代码修改为用Localization通过唯一标识来获得对应字符。

void OnUserProtocol()
{
    string strUrl = Localization.instance.Get("UserProtocol");
    Application.OpenURL(strUrl);
}

3.2、数据表国际化方案
天天飞车对于数据表的读取方案是用TDR组件中的ResConvert工具把xsl转换为二进制文件然后加载的。所以我们需要从源头即xsl开始做改造:

1、要在xsl文件中插入不通语言对应的字段,如上图。
改造前xsl文件内容
改造前xsl文件内容

改造后xsl文件内容
改造后xsl文件内容

2、在不同描述文件中转换对应语言的字段。
中文:
中文
印尼:
印尼

3、修改转换文件列表,使之生成多个语言的二进制文件,如下图:
语言的二进制文件
4、运行转换工具,数据表被转换到对应的语言目录。
5、程序只需要修改加载数据表的代码,根据语言版本加载对应的数据表即可,所有使用数据的代码均不需要修改。
3.3、编辑器内嵌文字国际化方案
对于编辑器内嵌文字,改造前如左下图字符是写死的。改造后给文本控件对象增加了一个本地化组件,之前写死的字符无效。
编辑器内嵌文字
编辑器内嵌文字
改造方案如下:
1、把字符抽取出来放入前面方案3.1所对应的文本中,不同语言放入对应的文本,并定义好唯一标识。
2、实现UILocalize组件,该组件在有个public的属性key,开发人员需要在编辑器里填写第一步定义的唯一标识。
3、UILocalize组件的功能是:调用方案3.1中的工具类Localization,根据key查询对应的字符,将Label组件中的字符替换掉。
4、UI图片国际化方案
UI图片的国际化稍微麻烦点,具体步骤举例如下:
1、将NGUIAtlas”EndGame”所包含的有文字的图片提取并生成新的NGUIAtlas“EndGameChinese”和”EndGameEnglish”,如下图。后二者包含了原本”EndGame”所有相应语言的图片。
UI图片国际化方案
2、新建引用类型的NGUIAtlas “EndGameLocal”,将它指向“EndGameChinese”和”EndGameEnglish”中任何一个。
3、修改UISprite组件,将NGUIAtlas指向引用类型的EndGameLocal。
UI图片国际化方案
4、给拥有UISprite的对象添加本地化组件UIAtlasLocalize,并填写对应的key(EndGame)。该组件的功能就是程序运行时动态的根据key和语言,对引用类型的NGUIAtlas对象赋值为对应的NGUIAtlas (EndGameChinese还是EndGameEnglish)。
5、如何根据key和语言找到对应的NGUIAtlas文件呢,该组件的实现仍然依赖3.1方案的文本文件。把key和对应语言的NGUIAtlas文件名给对应起来即可,如下图。该组件就可以用Localization类通过key加载到对应的NGUIAtlas文件,并把他赋值给UISprite。

UI图片国际化方案
5、场景对象图片国际化方案
项目中有极少量场景中对象的纹理,也会涉及到语言,需要做国际化改造。比如下面这辆卡车,使用了一个带有文字的纹理。
场景对象图片国际化方案
这种情况我们只需要给该对象添加一个材质的本地化组件MaterialLocalize,如下图。
场景对象图片国际化方案
我们只需要把对应语言的图片指定给对应的纹理对象即可。该组件根据语言将纹理设置给对象的材质。
6、声音文件国际化方案
声音文件国际化方案
声音国际化最简单,将语言相关音频放在不同的目录下,程序通过语言类型加载播放对应的音频文件即可。

7、字符串操作际化
字符串拼接在本地化中是一个很大的不确定性,各种语言的语法不尽相同,在运行时刻动态拼接要显示的文字,就相当于把语言的语法逻辑内嵌在代码里面,造成本地化的数据内容和代码逻辑强绑定。改造方法就是把原来拼接的句子事前拼接成完整的句子,而不是动态拼接, 其实就是体力活L 举个例子吧:
国际化前:
国际化前
国际化后:
国际化后

文章转载自天天飞车国际化方案,感谢作者:程序媛提供好文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值