Unity 实现本地化多语言化设置

背景

关于游戏开发多语言话工具,游戏开发完成,想要多渠道分发,语言多样化,比如:英语,法语,日本,等等,实现多种语言随意切换,满足各种玩家的阅读能力。此时,便是用到这个工具的时候。
原理:多语言显示并不是在线翻译,而是将不同语种进行事先的翻译,放入到表格中,当游戏先选中某种语言,则会加载翻译好的语言文本,然后在查找到对应的文本显示出来,我们就看到了当前语言下的文本内容。
这里对TextMesh,Text (UI),TextMeshPro TextMeshProUGUI,Renderer,Image,RawImage以及音频进行了支持,操作方便简单,有对应的上手Demo,可直接上手接入。
代码截图

/// <summary>
		/// Load localized strings to the memory.
		/// </summary>
		public static void Load()
		{
			var sheet = SheetParser.LoadFromPath(PathProvider.SheetPath, SheetParser.Delimiter.Comma);
			LocalizedStrings.Clear();
			for (var i = 1; i < sheet.Count; i++)
			{
				var id = sheet[i][0];
				if (string.IsNullOrEmpty(id)) continue;
				if (LocalizedStrings.ContainsKey(id)) throw new Exception($"<b>[Localizer]</b> Text ID \"<b>{id}</b>\" is duplicated. Please check your localization sheet.");

				var strings = sheet[i].ToList();
				strings.RemoveAt(0);
				strings = strings.Select(s => s.Replace("\\n", "\n"))
				                 .Select(s => s.Replace("\r", ""))
				                 .ToList();
				LocalizedStrings.Add(id, strings);
			}

			LanguageList = sheet[0].Select(s => s.Replace("\r", "")).ToList();
			LanguageList.RemoveAt(0);

			Settings.LoadLanguageSettings();
			ChangeLanguage(CurrentLanguageName ?? "");
		}

		/// <summary>
		/// Change current language.
		/// </summary>
		/// <param name="languageName">ex. "Japanese" "English"</param>
		public static void ChangeLanguage(string languageName)
		{
			var languageIndex = 0;
			if (languageName != "")
			{
				languageIndex = GetLanguageIndex(languageName);
			}

			CurrentLanguageName = LanguageList[languageIndex];
			Settings.SaveLanguageSettings();
		}

		/// <summary>
		/// Activate Previous Language.
		/// </summary>
		/// <returns>Activated language name</returns>
		public static string ActivatePreviousLanguage()
		{
			var prevIndex = (int)Mathf.Repeat(CurrentLanguageIndex - 1, LanguageList.Count);
			ChangeLanguage(LanguageList[prevIndex]);
			InjectAll();
			return LanguageList[prevIndex];
		}

简单的几个加载方法,语言切换方法。
涉及到的脚本,总体还不算多,功能相对全面,值得学习。
Demo_006 需要的可自取:
链接:https://pan.baidu.com/s/1CP4FLttldNHW-gW2zUrlDA
提取码:ncv6

posted @ 2020-11-25 16:09  低小调  阅读(1090)  评论(0编辑  收藏  举报