/// <summary> /// Add RTL Support to a language, this will make the language behave as RTL /// instead of LTR, numbers will be preserved. /// </summary> /// <param name="lang">The language to mark as RTL</param> public static void AddRTLSupport(MessageDirector.Lang lang) { if (!RTL_LANGUAGES.Contains(lang)) { RTL_LANGUAGES.Add(lang); } }
/// <summary> /// Adds a fallback code for a given language /// </summary> /// <param name="lang">The language to add to</param> /// <param name="fallback">The fallback to add</param> public static void AddLanguageFallback(MessageDirector.Lang lang, string fallback) { if (!LANG_FALLBACK.ContainsKey(lang)) { LANG_FALLBACK.Add(lang, new List <string>()); } if (!LANG_FALLBACK[lang].Contains(fallback)) { LANG_FALLBACK[lang].Add(fallback); } }
public static void AddSRMLErrorUITranslation(MessageDirector.Lang language, string errorText, string abortText) => srmlErrorMessages.Add(language, new KeyValuePair <string, string>(errorText, abortText));
public static void SetTranslations(MessageDirector dir, Assembly yourAssembly = null) { MessageDirector.Lang lang = dir.GetCultureLang(); if (currLang == lang) { return; } Assembly assembly = yourAssembly ?? ReflectionUtils.GetRelevantAssembly(); string code = lang.ToString().ToLower(); string codeBase = assembly.CodeBase; UriBuilder uri = new UriBuilder(codeBase); string path = Uri.UnescapeDataString(uri.Path); FileInfo langFile = new FileInfo(Path.Combine(Path.GetDirectoryName(path), $"Resources\\Lang\\{code}.yaml")); if (!langFile.Exists) { if (LANG_FALLBACK.ContainsKey(lang)) { foreach (string fallback in LANG_FALLBACK[lang]) { code = fallback; langFile = new FileInfo(Path.Combine(Path.GetDirectoryName(path), $"Resources\\Lang\\{code}.yaml")); if (langFile.Exists) { break; } } } if (!langFile.Exists) { code = MessageDirector.Lang.EN.ToString().ToLower(); langFile = new FileInfo(Path.Combine(Path.GetDirectoryName(path), $"Resources\\Lang\\{code}.yaml")); } } currLang = lang; using (StreamReader reader = new StreamReader(langFile.FullName)) { foreach (string line in reader.ReadToEnd().Split('\n')) { if (!line.StartsWith("@import ")) { continue; } string imp = line.Replace("@import ", "").Trim().Replace("/", "\\"); FileInfo extFile = new FileInfo(Path.Combine(Path.GetDirectoryName(path), $"Resources\\Lang\\{code}\\{imp}")); if (extFile.FullName.Equals(langFile.FullName)) { continue; } if (extFile.Exists) { SetTranslations(extFile); } } } }
/// <summary> /// Checks if a language is RTL /// </summary> /// <param name="lang">The language to check</param> /// <returns>True if it's RTL, false otherwise</returns> public static bool IsRTL(MessageDirector.Lang lang) { return(RTL_LANGUAGES.Contains(lang)); }
static void Postfix(string path, Dictionary <string, string> __result, string text) { if (path == "ui") { MessageDirector.Lang lang = GameContext.Instance.MessageDirector.GetCultureLang(); if (TranslationPatcher.srmlErrorMessages.ContainsKey(lang)) { __result["t.srml_error"] = TranslationPatcher.srmlErrorMessages[lang].Key; __result["t.srml_error.abort"] = TranslationPatcher.srmlErrorMessages[lang].Value; } else { switch (lang) { case MessageDirector.Lang.DE: __result["t.srml_error"] = "SRML-FEHLER"; __result["t.srml_error.abort"] = $"Ladevorgang des mod wird abgebrochen..."; break; case MessageDirector.Lang.ES: __result["t.srml_error"] = "SRML ERROR"; __result["t.srml_error.abort"] = "Cargando mod abortado..."; break; case MessageDirector.Lang.FR: __result["t.srml_error"] = "SRML ERREUR"; __result["t.srml_error.abort"] = "Annulation du chargement du mod..."; break; case MessageDirector.Lang.RU: __result["t.srml_error"] = "SRML ОШИБКА"; __result["t.srml_error.abort"] = "Прерывается загрузка модификация..."; break; case MessageDirector.Lang.SV: __result["t.srml_error"] = "SRML FEL"; __result["t.srml_error.abort"] = "Avbrytande laddning av modifiering..."; break; case MessageDirector.Lang.ZH: __result["t.srml_error"] = "SRML 错误"; __result["t.srml_error.abort"] = "正在中止模组加载..."; break; case MessageDirector.Lang.JA: __result["t.srml_error"] = "SRMLのエラー"; __result["t.srml_error.abort"] = "MODのロードを中断しています..."; break; case MessageDirector.Lang.PT: __result["t.srml_error"] = "SRML ERROR"; __result["t.srml_error.abort"] = "Carregamento mod abortado..."; break; case MessageDirector.Lang.KO: __result["t.srml_error"] = "SRML 오류"; __result["t.srml_error.abort"] = "모드 로드 중단 중..."; break; default: __result["t.srml_error"] = "SRML ERROR"; __result["t.srml_error.abort"] = "Aborting mod loading..."; break; } } } TranslationPatcher.doneDictionaries[path] = __result; if (!TranslationPatcher.patches.TryGetValue(path, out var dict)) { return; } foreach (var entry in dict) { __result[entry.Key] = entry.Value; } }