Unity3D实现多语言本地化

发表于2018-03-21
评论2 7.4k浏览
一款游戏可能有多个语言版本,各个版本的语言不相同,有中文的、英文的等多种版本,在开发时,我们一般将关键字翻译到一个文本文件,当需要对游戏的关键字翻译后,只需要对文件进行解析做相关处理。接下来就用一个简单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来获取需要显示的字符串

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

这样一个简单语言本地化项目就被创建出来的,大家不妨也去尝试下吧。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引