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

一套项目完结之后,还项发布英文版 日文版怎么办? 有两种解决方案,第一种比较笨的方法是手动的把相应文字替换掉.
第二种就是把需要切换的语言集中存放到txt文档中,通过list集合,的方法进行访问(每一个key可以对应多个value). 下面实现的是第二种方法.
目标:实现 中文.英文.日文的切换.
1 界面UI的简单搭建:
这里写图片描述
2 txt文档的创建 格式为UTF-8
这里写图片描述
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; }
    }
    /// <summary>
    /// 语言
    /// </summary>
    [SerializeField]
    private SystemLanguage language;
    /// <summary>
    /// 相同的key 对应 不同国家的value
    /// </summary>
    private Dictionary<string, string> dict = new Dictionary<string, string>();
/// <summary>
    /// 加载预翻译的语言
    /// </summary>
    private void loadLanguage()
    {
        //加载文件
        TextAsset ta = Resources.Load<TextAsset>(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();
    }
    /// <summary>
    /// 获取对应的value
    /// </summary>
    /// <param name="key"></param>
    /// <returns>返回对应的value 如果不存在这个key 就返回空串</returns>
    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>().text = value;
            }
        }
    }
}

5 点击 language 选择相应的语言.即可实现切换.
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弹雨11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值