Unity 多语言之 本地化动态设置多语言界面

2024-10-23 04:06:45

1、打开Unity,新建一个空工程,具体如下图

Unity 多语言之 本地化动态设置多语言界面Unity 多语言之 本地化动态设置多语言界面Unity 多语言之 本地化动态设置多语言界面Unity 多语言之 本地化动态设置多语言界面

6、LanguageDataManager 脚本用来加载Txt内容到字典中,然后给与通过key获取文本内容的方法,具体如下图

Unity 多语言之 本地化动态设置多语言界面Unity 多语言之 本地化动态设置多语言界面

7、LanguageDataManager 脚本具体如内容如下:using System.Collections;using System.Collections.Generic;using UnityEngine;public enum Language{ Chinese, //中文 English, //英文}public enum LanguageTextName{ Chinese_Toggle, //中文Toggle English_Toggle, //英文Toggle Text1, // 文本1 Text2, // 文本2}public class LanguageDataManager : MonoBehaviour { [SerializeField] internal Language currentLanguage = Language.Chinese; //当前设置的语言 // 中英文字典 private Dictionary<string, string> ChineseDictionary = new Dictionary<string, string>(); private Dictionary<string, string> EnglishDictionary = new Dictionary<string, string>(); private static LanguageDataManager instancce = null; public static LanguageDataManager Instancce { get { return instancce; } } private void Awake() { instancce = this; // 加载语言资源 LoadLanguageTxt(Language.Chinese); LoadLanguageTxt(Language.English); } /// <summary> /// 设置语言 /// </summary> public void SetCurrentLanguageValue(Language language) { currentLanguage = language; //获取场景中所有类型脚本 LanguageUIText[] languageUITexts = Resources.FindObjectsOfTypeAll<LanguageUIText>(); for (int i = 0; i < languageUITexts.Length; i++) { Debug.Log("SetCurrentLanguageValue:" + languageUITexts.Length); languageUITexts[i].SetLanguageTextName(); } Debug.Log("languageUITexts:" + languageUITexts.Length); } /// <summary> /// 加载对应的语言资源txt,保存到字典中 /// </summary> /// <param name="language"></param> internal void LoadLanguageTxt(Language language) { TextAsset ta = Resources.Load<TextAsset>("Language/" + language.ToString()); if (ta == null) { Debug.LogWarning("没有该语言的文本文件"); return; } string[] lines = ta.text.Split('\n'); for (int i = 0; i < lines.Length; i++) { if (string.IsNullOrEmpty(lines[i])) { continue; } string[] kv = lines[i].Split(':'); if (language == Language.Chinese) { ChineseDictionary.Add(kv[0], kv[1]); } else if (language == Language.English) { EnglishDictionary.Add(kv[0], kv[1]); } Debug.Log(string.Format("key:{0},value:{1}", kv[0], kv[1])); } } /// <summary> /// 获得对应语言字典中的对应的 key 值 /// </summary> /// <param name="key"></param> /// <returns></returns> internal string GetLanguageText(string key) { if (currentLanguage == Language.Chinese) { if (ChineseDictionary.ContainsKey(key)) { return ChineseDictionary[key]; } else { Debug.Log("!ChineseDictionary.ContainsKey(key)"); } } else if (currentLanguage == Language.English) { if (EnglishDictionary.ContainsKey(key)) { return EnglishDictionary[key]; } else { Debug.Log("!EnglishDictionary.ContainsKey(key)"); } } return string.Empty; }}

8、LanguageUIText 脚本用来绑定到需要更新的Text上,动态获取文本值添加到对应的Text上,在Start和OnEnable函数中同时更新,避免未及时更新,具体如下图

Unity 多语言之 本地化动态设置多语言界面Unity 多语言之 本地化动态设置多语言界面

13、SelectLanguageToggle 脚本添加到,两个Toggle的父物体上,并对应赋值Toggle,具体如下图

Unity 多语言之 本地化动态设置多语言界面

15、以上正确完成后,运行场景,切换语言,即可动态设置语言Text,而且隐藏的Text,也同步更新了,可以查看Text2,具体如下图

Unity 多语言之 本地化动态设置多语言界面
猜你喜欢