Unity3D实现多语言本地化

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

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

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

接下来我做一个简单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来获取需要显示的字符串


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

 

 

 

 

 

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值