本地化管理之多语言

        当要实现游戏中多种语言选择时,如果单个修改则非常麻烦;所以简便的方法即为将多种语言放于不同文件,按选择的语言进行加载;当然图片上的文字不同此方法实现。

1. 语言文件的准备

        将要进行可选择的语言列表放于不同文件,本次格式采用key=value格式,每个对之后换行。如下为中文和英文:


2. 本地文件管理

        加载运用单利模式,根据所选择的语言进行加载放于Resources文件夹下的Localization文件夹下,如图


可用其中的Language属性对语言进行选择。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class LocalizationManager  {

    private static LocalizationManager _instance;

    public static LocalizationManager Instance
    {
        get
        {
            if(_instance==null)
            {
                _instance = new LocalizationManager();
            }
            return _instance;
        }
    }

    public void Init()
    {//DoNothing
    }

    private const string Chinese = "Localization/Chinese";
    private const string English = "Localization/English";

    public const string Language = English;//只用改变此处的值,就可实现改变语言

    private Dictionary<string, string> dict;
    private LocalizationManager()
    {
        dict = new Dictionary<string, string>();
        TextAsset ta = Resources.Load<TextAsset>(Language);

        string[] lines = ta.text.Split('\n');

        foreach(string line in lines)
        {
            if(string.IsNullOrEmpty(line)==false)
            {
                string[] keyvalues = line.Split('=');

                dict.Add(keyvalues[0], keyvalues[1]);
            }
        }
    }

    public string GetValue(string key)
    {
        string value;
        dict.TryGetValue(key, out value);
        return value;
    }
}

3. 语言改变

        新建了一个脚本,挂于所有语言需要改变文字的含有Text组件对象上,并输入此组件对应的key,语言文本文件中=前即为key值。控制language就可改变语言。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

///此脚本挂于场景中含有Text的对象上,用于改变文字
public class LocalizationText : MonoBehaviour {

    // Use this for initialization
    public string key;

    private void Awake()
    {
        LocalizationManager.Instance.Init();//为实例化出单例对象
    }
    void Start () {
        string value = LocalizationManager.Instance.GetValue(key);
        GetComponent<Text>().text = value;
	}
}

        示例如图:


运行后:



猜你喜欢

转载自blog.csdn.net/a962035/article/details/80655474