Unity编程笔记----多语言切换

一套项目完结之后,还项发布英文版 日文版怎么办? 有两种解决方案,第一种比较笨的方法是手动的把相应文字替换掉.
第二种就是把需要切换的语言集中存放到txt文档中,通过list集合,的方法进行访问(每一个key可以对应多个value). 下面实现的是第二种方法.
目标:实现 中文.英文.日文的切换.
1 界面UI的简单搭建:
Unity编程笔记----多语言切换_第1张图片
2 txt文档的创建 格式为UTF-8
Unity编程笔记----多语言切换_第2张图片
3 LanguageMgr的创建,挂载到Canvas上

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class LanguageMgr : MonoBehaviour
{
    private static LanguageMgr instance = null;
    public static LanguageMgr Instance
    {
        get { return instance; }
    }
    /// 
    /// 语言
    /// 
    [SerializeField]
    private SystemLanguage language;
    /// 
    /// 相同的key 对应 不同国家的value
    /// 
    private Dictionary<string, string> dict = new Dictionary<string, string>();
/// 
    /// 加载预翻译的语言
    /// 
    private void loadLanguage()
    {
        //加载文件
        TextAsset ta = Resources.Load(language.ToString());
        if (ta == null)
        {
            Debug.LogWarning("没有这个语言的翻译文件");
            return;
        }
        //获取每一行
        string[] lines = ta.text.Split('\n');
        //获取key value
        for (int i = 0; i < lines.Length; i++)
        {
            //检测
            if (string.IsNullOrEmpty(lines[i]))
                continue;
            //获取 key:kv[0] value kv[1]
            string[] kv = lines[i].Split(':');
            //保存到字典
            dict.Add(kv[0], kv[1]);
            Debug.Log(string.Format("key:{0}, value:{1}", kv[0], kv[1]));
        }
    }
    void Awake()
    {
        instance = this;
        loadLanguage();
    }
    /// 
    /// 获取对应的value
    /// 
    /// 
    /// 返回对应的value 如果不存在这个key 就返回空串
    public string GetText(string key)
    {
        if (dict.ContainsKey(key))
            return dict[key];
        else//没有这个key
        {
            return string.Empty;
        }
    }
}

4 UIText 在需要切换语言的text上挂载该脚本

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
public class UIText : MonoBehaviour
{
    [SerializeField]
    private string key;
    // Use this for initialization
    void Start()
    {
        if (!string.IsNullOrEmpty(key))
        {
            string value = LanguageMgr.Instance.GetText(key);
            if (!string.IsNullOrEmpty(value))
            {
                gameObject.GetComponent().text = value;
            }
        }
    }
}

5 点击 language 选择相应的语言.即可实现切换.
Unity编程笔记----多语言切换_第3张图片

你可能感兴趣的:(Unity编程笔记----多语言切换)