/// <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);
     }
 }
示例#3
0
 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));
 }
示例#6
0
        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;
            }
        }