Unity多语言功能
1.把Txt三种语言挂在Login(启动页)面板中去
2.要有多语言的功能的Text 都挂脚本LanguageText 脚本
LanguageMgr.cs脚本
using System;
using System.Collections.Generic;
using UnityEngine;
using System.Text;
public class LanguageMgr
{private static StringBuilder mBuilder;private static LanguageMgr instance;public static LanguageMgr mInstance { get { if (instance == null) instance = new LanguageMgr(); return instance; } }/// 当前的语言 0简中 1英文 2繁中 public int mCurLanguage = 0;/// 得到当前语言的 txt 名字 public string GetCurLanguageTxtName(){if (mCurLanguage == 0)//简{return "Language_ZH";}else if (mCurLanguage == 1)//英{return "Language_EN";}else if (mCurLanguage == 2)//繁体{return "Language_TW";}return "Language_ZH";}private Dictionary mDicKeyLanguage = new Dictionary();public event Action EActTextChange;/// 初始化 从component传内容 public void StartSetDicLanguage(string pLanguage){mDicKeyLanguage.Clear();string[] lines = pLanguage.Split(new string[] { "\n" }, StringSplitOptions.None);foreach (string line in lines){if (line == null || line.Contains("=") == false) continue;string[] keyAndValue = line.Split('=');if (keyAndValue.Length <= 2){mDicKeyLanguage[keyAndValue[0]] = keyAndValue[1].Trim();}else{if (null == mBuilder)mBuilder = new StringBuilder();if (mBuilder.Length > 0)mBuilder.Clear();for (int i = 1; i < keyAndValue.Length; i++){mBuilder.Append(keyAndValue[i]);if (i < keyAndValue.Length - 1){mBuilder.Append("=");}}mDicKeyLanguage[keyAndValue[0]] = mBuilder.ToString().Trim();}}}/// 手动改语言.将发事件给Text 们 public void SettingSetDicLanguage(string pLanguage){PlayerPrefsMgr.mInstance.SetInt(PlayerPrefsKeys.KEY_LANGUAGE, mCurLanguage.GetHashCode());StartSetDicLanguage(pLanguage);EActTextChange();}/// 根据key 去取值 public string GetLanguageForKey(string key){string value;if (mDicKeyLanguage.TryGetValue(key, out value)){//#if LOG_ZSX// return value.Replace("\\n", "\n") + "T";//#endifreturn value.Replace("\\n", "\n");}return "";}/// 根据key 去取值 value又有多个值 用^分隔开 index从0开始 public string GetLanguageForKeyMoreValue(string key, int index){string value;if (mDicKeyLanguage.TryGetValue(key, out value)){var tOthers = value.Split('^');//#if LOG_ZSX// return tOthers[index] + "T";//#endifreturn tOthers[index];}return "";}public string[] GetLanguageForKeyMoreValues(string key){string value;if (mDicKeyLanguage.TryGetValue(key, out value)){var tOthers = value.Split('^');//#if LOG_ZSX// for (int i = 0; i < tOthers.Length; i++)// {// tOthers[i] = tOthers[i] + "T";// }//#endifreturn tOthers;}return new string[] { };}
}
LanguageText 挂在每个Text组件上
using UnityEngine;
using UnityEngine.UI;
public class LanguageText : MonoBehaviour
{public string mKey;private Text textLbl;/// 除登录页=false 其他都=true public bool mUseAwake = true;private void Awake(){if (mUseAwake){LoadContent();}}private void Start(){if (mUseAwake == false)LoadContent();}void LoadContent(){if (string.IsNullOrEmpty(mKey)) return;textLbl = this.GetComponent();if (textLbl == null) { Debug.LogError("没Text 组件呀~~"); return; }textLbl.text = LanguageMgr.mInstance.GetLanguageForKey(mKey);LanguageMgr.mInstance.EActTextChange += EventActionChangeTxt;//加上监听}private void EventActionChangeTxt(){if (textLbl != null)textLbl.text = LanguageMgr.mInstance.GetLanguageForKey(mKey);}public void OnDestroy(){LanguageMgr.mInstance.EActTextChange -= EventActionChangeTxt;}
}


PS:辅助小工具在第5项 https://blog.csdn.net/SendSI/article/details/99948814
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
