【Unity】多语言版本解决方案

最近在做游戏的多语言版本,海外版本涉及一个语言翻译的问题,每个国家有自己的文字,如泰国的泰文,韩国的韩文,台湾的繁体等。

针对这种情况,进行了多语言抽象的处理,方便后期出其它多语言包。

一个 Unity3d 游戏中,使用中文的地方有以下几个地方:

  • 代码中出现中文,比如一些飘字或文字提示等。
  • 配置表中出现的中文,比如道具名字、玩法描述等。
  • 带有中文字体的图片资源。
  • Prefab中Text里的中文。

 

那么解决多语言版本的首先要解决问题就是,要把游戏中的所有中文抽取出来,尽可能集中放在一张表中,方便拿给相关人员翻译。

具体解决思路如下:

1.代码和配置表的处理方案:

  • 写一个中文正则工具,把代码中出现的中文抽取出来,生成Excel表,方便拿给相关人员翻译。
  • 使用一个有含义字符串替换原来中文,代码中有一句中文:Tips.ShowMeg("挑战次数用完,明日再来"),替换 Tips.ShowMsg(Language.GetWord(10001)),其中 Language.GetWord() 是用来根据Id获取语言包的接口,10001是 Id,这个 Id 是唯一的,根据这个 Id 索引出被翻译的内容。
  • 做文本替换的时候,需要去重,因为代码中或配置表中会有很多重复的中文,避免翻译重复的文本。

 

2.带有中文的图片的处理方案:

把游戏中所有带有中文字的图片找出来,让美术翻译好再替换回去。

前期规划好的话,这个找图片的工作就不大,比如带有中文的图片的命名规范好,如后面带有 xxx_isfont.png 类似,这样,那么做一个小工具,遍历下资源目录,可以很方便的把 _isfont 资源找出来,这里值得注意的是,找出来的资源按原本的目录结构与命名交给美术同事,翻译好再替换,这样处理起来方便,也不会破坏资源依赖。

 

3.预设中的处理方案:

前期的做法,我把 prefab 的中文全部抽出来,放到配置表中,保存具体 Text 的路径,然后 prefab 加载完成的时候再重新刷新 Text 组件。但是这会造成性能消耗。解决方案是:翻译完后直接按照 Text 的路径设置回去。

  • 把 prefab 的 Text 里的中文抽出来,放到一张 Excel 中,保存 Text 的路径。
  • 翻译好后,再重新根据 Text 路径把翻译好的文本设上去,保存预设。

 

以上是游戏多语言版的解决思路,使用 Python 中的 xlrd 和 lxwt 制作小工具。配置表中替换文本的时候,避免递归死循环,代码和配置表使用Utf-8格式。

 

推荐阅读:

懂点理财

最近一些感悟

 

最好的投资是提升自己的认知

你可能感兴趣的:(Unity3d)