一款游戏可能有多个语言版本,各个版本的语言不相同,有中文的、英文的等多种版本
在开发时,我们一般将关键字翻译到一个文本文件
当需要对游戏的关键字翻译后,只需要对文件进行解析做相关处理
接下来我做一个简单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来获取需要显示的字符串
运行游戏,成功将中文转化为英文