当前位置:   article > 正文

Unity 本地化比较实用的实现方案_unity i2.localizationmanager

unity i2.localizationmanager

本篇笔记是在I2Localization插件的基础上针对项目需求,制定的一套本地化技术解决方案,目的是实现一个语言配置文件统一来管理整个游戏的语言本地化,个人认为是非常实用的,有兴趣的同学可以简单看下这个方案的解决思路。


游戏中的本地化考虑两种资源形式:

一、图片本地化

二、文字本地化


图片本地化

图片本地化分为两种情况:
1、用Unity编辑器制作的静态界面图片本地化,如图


这个UI图片不需要程序动态加载,属于静态UI,我们借助本地化工具I2 Localization插件,即可实现这个UI的本地化,使用方法下面再说。

2、代码控制的动态添加的图片资源本地化,如图


这种UI变化涉及到的逻辑比较复杂,我们可能想要程序动态创建和更换这些UI的显示,本地化插件不够灵活,这时候我们把资源放入相应的语言路径下,动态加载即可(动态的资源放入Resoucres)

动态加载方法:

 iconImg.sprite = Resources.Load(string.Format("UI/XXUI/{0}/{1}",GameTools.getInstance().getCurrentLanguageDict(),"Button"),typeof(Sprite)) as Sprite;

文字本地化

文字本地化也分为两种情况:
1、用Unity编辑器制作的静态文字界面本地化,如图


这种系统文字也使用本地化插件I2 Localization制作也很方便。

2、代码控制添加的系统文字,如图


在Resouces/Doc目录下编辑如下格式txt文件

  1. #根据";"来截取字符串,所以本地语言文字中不要存在“;”作为值,各个字段之间不能存在空格和换行
  2. Key;Type;Desc;english [bs];Chinese (Simplified);Chinese (Traditional)
  3. reveive;Text;;;领取;

写一个解析脚本,这样可以根据key值读取不同语言的文字,至于为什么是这种格式,下面介绍I2Localization插件的时候再介绍

解析脚本

  1. public class _LocalizationManager : _Instance<_LocalizationManager> {
  2. //存储语言字典
  3. private Dictionary<string,string> __languageDict;
  4. //ctor
  5. public _LocalizationManager(){
  6. __languageDict = new Dictionary<string,string>();
  7. //根据系统语言读取文本
  8. if(Application.isEditor) {
  9. //设置默认语言为中文
  10. GlobalConfig.LANGUAGE = "1";
  11. }
  12. LoadLanguageDictByTxt();
  13. }
  14. /// <summary>
  15. /// 通过txt文件加载游戏文字语言,路径 地址:Resources/Doc/doc.txt
  16. /// </summary>
  17. private void LoadLanguageDictByTxt(){
  18. if(__languageDict.Count > 0){
  19. __languageDict.Clear ();
  20. }
  21. //根据语言,将text格式的行录入语言字典中
  22. string p = "Doc/doc";
  23. TextAsset asseet = Resources.Load<TextAsset>(p);
  24. string l = asseet.ToString();
  25. //解析字符串
  26. string[] firstSplit = l.Split('\n');
  27. for(int i = 0; i< firstSplit.Length; i++){
  28. if(!string.IsNullOrEmpty(firstSplit[i])){
  29. string[] secondSplit = firstSplit[i].Split(';');
  30. if("Text" == secondSplit[1]){
  31. string value = secondSplit[int.Parse(GlobalConfig.LANGUAGE) + 2];
  32. if(string.IsNullOrEmpty(value)){
  33. //如果当前语言没有设置,默认读取中文
  34. value = secondSplit[4];
  35. }
  36. __languageDict.Add(secondSplit[0],value);
  37. } else
  38. continue;
  39. }
  40. }
  41. }
  42. /// <summary>
  43. /// 根据key值,读取文字
  44. /// </summary>
  45. /// <returns>The dic string.</returns>
  46. /// <param name="varKey">Variable key.</param>
  47. public string getDicStr(string varKey){
  48. if(string.IsNullOrEmpty(varKey))
  49. return null;
  50. string text;
  51. if(__languageDict.TryGetValue(varKey,out text)){
  52. return text;
  53. }
  54. return null;
  55. }
  56. }

获取字符串直接调用接口即可: _LocalizationManager.getInstance().getDicStr("xxx");

Edit


I2Localization插件使用说明

1、导入I2Localization插件到Unity工程中。

2、关键看这个I2Languages组件(这个预设体是全局的哦,如果不想要全局,拖拽到场景中也可以,但是暂不推荐这样做,后面的封装需要全局),添加默认语言,注意下面勾选Store Integration IOS和android


3、添加terms,就是添加key-value


4、添加的terms类型要选择正确,区分图片类型和文字类型
5、在项目中创建一个UI(Text),拖拽I2Localization插件中的Localize脚本,然后选择要绑定的key,本地化图片操作相同,至此,本地化制作结束


6、将I2Localization配置的key-value打包(合并)成一个txt文件,方便后期统一翻译,而且用 _LocalizationManager.getInstance().getDicStr("xxx")接口也可以代码动态访问


7、如果手动修改了doc.txt,也可以import进来,点击import面板中的merge即可

优缺点分析:

优点:
1、配置多语言有可视化的界面,更方便。
2、只需要一个文件就能支持n种语言,后期翻译一键搞定。
3、扩展了I2Localization插件的文件解析方法,并且支持程序动态控制语言文字,更加灵活。

缺点:
1、所有的资源和文字都配在一个txt文件中,当游戏本地化数据足够大的时候,解析时间会增加
2、所有的语言配置都在一个文件中,容易造成多人开发冲突



声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/106796
推荐阅读
相关标签
  

闽ICP备14008679号