一套项目完结之后,还项发布英文版 日文版怎么办? 有两种解决方案,第一种比较笨的方法是手动的把相应文字替换掉.
第二种就是把需要切换的语言集中存放到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 选择相应的语言.即可实现切换.