Unity3D实现多语言本地化
发表于2018-03-21
一款游戏可能有多个语言版本,各个版本的语言不相同,有中文的、英文的等多种版本,在开发时,我们一般将关键字翻译到一个文本文件,当需要对游戏的关键字翻译后,只需要对文件进行解析做相关处理。接下来就用一个简单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来获取需要显示的字符串
运行游戏,成功将中文转化为英文
这样一个简单语言本地化项目就被创建出来的,大家不妨也去尝试下吧。