Unity3D实现多语言本地化

来源:互联网 发布:数据字典生成工具 编辑:程序博客网 时间:2024/04/30 06:43

一款游戏可能有多个语言版本,各个版本的语言不相同,有中文的、英文的等多种版本

在开发时,我们一般将关键字翻译到一个文本文件

当需要对游戏的关键字翻译后,只需要对文件进行解析做相关处理

接下来我做一个简单Demo,介绍创建一个简单语言本地化项目

先在Scene视图下创建两个按钮,如下图

在Project视图下新建一个Resources文件夹

在Resources文件夹下新建两个名为Chinese和English的.txt文件

文本文件等号左边是同一的标识,相当于一个“key”

中文问题如果现实不了,可能是编码问题,这里我将该文本编码设置成UTF-8

Chinese.txt

start=开始  pause=暂停  

English.txt

start=Start  pause=Pause  

接下来新建一个命名为LocalizationManager的C#脚本,用于对本地化进行管理

LocalizationManager.cs

using UnityEngine;  using System.Collections;  using System.Collections.Generic;    public class LocalizationManager  {      //单例模式      private static LocalizationManager _instance;        public static LocalizationManager GetInstance      {          get          {              if (_instance == null)              {                  _instance = new LocalizationManager();              }                return _instance;          }      }        private const string chinese = "Chinese";      private const string english = "English";        //选择自已需要的本地语言      public const string language = english;          private Dictionary<string, string> dic = new Dictionary<string, string>();      /// <summary>      /// 读取配置文件,将文件信息保存到字典里      /// </summary>      public LocalizationManager()      {          TextAsset ta = Resources.Load<TextAsset>(language);          string text = ta.text;            string[] lines = text.Split('\n');          foreach (string line in lines)          {              if (line == null)              {                  continue;              }              string[] keyAndValue = line.Split('=');              dic.Add(keyAndValue[0], keyAndValue[1]);          }      }        /// <summary>      /// 获取value      /// </summary>      /// <param name="key"></param>      /// <returns></returns>      public string GetValue(string key)      {          if (dic.ContainsKey(key) == false)          {              return null;          }          string value = null;          dic.TryGetValue(key, out value);          return value;      }  }  

接下来新建一个命名为LocalizationText的C#脚本,用与挂载到含有Text组件的对象上

LocalizationText.cs

using UnityEngine;  using System.Collections;  using UnityEngine.UI;  public class LocalizationText : MonoBehaviour   {      public string key = " ";      void Start()      {          GetComponent<Text>().text = LocalizationManager.GetInstance.GetValue(key);      }  } 

最后,将LocalizationText挂载到含Text组件的游戏对象上

并将输入key,通过key来获取需要显示的字符串


运行游戏,成功将中文转化为英文


1 0