1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048 |
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.Globalization;
- using System.Linq;
- using System.Text.RegularExpressions;
- using System.Threading;
- using UnityEngine;
- namespace I2.Loc
- {
- public static class LocalizationManager
- {
- public static void InitializeIfNeeded()
- {
- if (string.IsNullOrEmpty(LocalizationManager.mCurrentLanguage) || LocalizationManager.Sources.Count == 0)
- {
- LocalizationManager.UpdateSources();
- LocalizationManager.SelectStartupLanguage();
- }
- }
- public static string GetVersion()
- {
- return "2.8.6 f2";
- }
- public static int GetRequiredWebServiceVersion()
- {
- return 5;
- }
- public static string GetWebServiceURL(LanguageSource source = null)
- {
- if (source != null && !string.IsNullOrEmpty(source.Google_WebServiceURL))
- {
- return source.Google_WebServiceURL;
- }
- LocalizationManager.InitializeIfNeeded();
- for (int i = 0; i < LocalizationManager.Sources.Count; i++)
- {
- if (LocalizationManager.Sources[i] != null && !string.IsNullOrEmpty(LocalizationManager.Sources[i].Google_WebServiceURL))
- {
- return LocalizationManager.Sources[i].Google_WebServiceURL;
- }
- }
- return string.Empty;
- }
- public static string CurrentLanguage
- {
- get
- {
- LocalizationManager.InitializeIfNeeded();
- return LocalizationManager.mCurrentLanguage;
- }
- set
- {
- LocalizationManager.InitializeIfNeeded();
- string supportedLanguage = LocalizationManager.GetSupportedLanguage(value);
- if (!string.IsNullOrEmpty(supportedLanguage) && LocalizationManager.mCurrentLanguage != supportedLanguage)
- {
- LocalizationManager.SetLanguageAndCode(supportedLanguage, LocalizationManager.GetLanguageCode(supportedLanguage), true, false);
- }
- }
- }
- public static string CurrentLanguageCode
- {
- get
- {
- LocalizationManager.InitializeIfNeeded();
- return LocalizationManager.mLanguageCode;
- }
- set
- {
- LocalizationManager.InitializeIfNeeded();
- if (LocalizationManager.mLanguageCode != value)
- {
- string languageFromCode = LocalizationManager.GetLanguageFromCode(value, true);
- if (!string.IsNullOrEmpty(languageFromCode))
- {
- LocalizationManager.SetLanguageAndCode(languageFromCode, value, true, false);
- }
- }
- }
- }
- public static string CurrentRegion
- {
- get
- {
- string currentLanguage = LocalizationManager.CurrentLanguage;
- int num = currentLanguage.IndexOfAny("/\\".ToCharArray());
- if (num > 0)
- {
- return currentLanguage.Substring(num + 1);
- }
- num = currentLanguage.IndexOfAny("[(".ToCharArray());
- int num2 = currentLanguage.LastIndexOfAny("])".ToCharArray());
- if (num > 0 && num != num2)
- {
- return currentLanguage.Substring(num + 1, num2 - num - 1);
- }
- return string.Empty;
- }
- set
- {
- string text = LocalizationManager.CurrentLanguage;
- int num = text.IndexOfAny("/\\".ToCharArray());
- if (num > 0)
- {
- LocalizationManager.CurrentLanguage = text.Substring(num + 1) + value;
- return;
- }
- num = text.IndexOfAny("[(".ToCharArray());
- int num2 = text.LastIndexOfAny("])".ToCharArray());
- if (num > 0 && num != num2)
- {
- text = text.Substring(num);
- }
- LocalizationManager.CurrentLanguage = text + "(" + value + ")";
- }
- }
- public static string CurrentRegionCode
- {
- get
- {
- string currentLanguageCode = LocalizationManager.CurrentLanguageCode;
- int num = currentLanguageCode.IndexOfAny(" -_/\\".ToCharArray());
- return (num >= 0) ? currentLanguageCode.Substring(num + 1) : string.Empty;
- }
- set
- {
- string text = LocalizationManager.CurrentLanguageCode;
- int num = text.IndexOfAny(" -_/\\".ToCharArray());
- if (num > 0)
- {
- text = text.Substring(0, num);
- }
- LocalizationManager.CurrentLanguageCode = text + "-" + value;
- }
- }
- public static CultureInfo CurrentCulture
- {
- get
- {
- return LocalizationManager.mCurrentCulture;
- }
- }
- public static void SetLanguageAndCode(string LanguageName, string LanguageCode, bool RememberLanguage = true, bool Force = false)
- {
- if (LocalizationManager.mCurrentLanguage != LanguageName || LocalizationManager.mLanguageCode != LanguageCode || Force)
- {
- if (RememberLanguage)
- {
- PersistentStorage.SetSetting_String("I2 Language", LanguageName);
- }
- LocalizationManager.mCurrentLanguage = LanguageName;
- LocalizationManager.mLanguageCode = LanguageCode;
- LocalizationManager.mCurrentCulture = LocalizationManager.CreateCultureForCode(LanguageCode);
- if (LocalizationManager.mChangeCultureInfo)
- {
- LocalizationManager.SetCurrentCultureInfo();
- }
- LocalizationManager.IsRight2Left = LocalizationManager.IsRTL(LocalizationManager.mLanguageCode);
- LocalizationManager.HasJoinedWords = GoogleLanguages.LanguageCode_HasJoinedWord(LocalizationManager.mLanguageCode);
- LocalizationManager.LocalizeAll(Force);
- }
- }
- private static CultureInfo CreateCultureForCode(string code)
- {
- CultureInfo result;
- try
- {
- result = CultureInfo.CreateSpecificCulture(code);
- }
- catch (Exception)
- {
- result = CultureInfo.InvariantCulture;
- }
- return result;
- }
- public static void EnableChangingCultureInfo(bool bEnable)
- {
- if (!LocalizationManager.mChangeCultureInfo && bEnable)
- {
- LocalizationManager.SetCurrentCultureInfo();
- }
- LocalizationManager.mChangeCultureInfo = bEnable;
- }
- private static void SetCurrentCultureInfo()
- {
- Thread.CurrentThread.CurrentCulture = LocalizationManager.mCurrentCulture;
- }
- private static void SelectStartupLanguage()
- {
- if (LocalizationManager.Sources.Count == 0)
- {
- return;
- }
- string setting_String = PersistentStorage.GetSetting_String("I2 Language", string.Empty);
- string currentDeviceLanguage = LocalizationManager.GetCurrentDeviceLanguage();
- if (!string.IsNullOrEmpty(setting_String) && LocalizationManager.HasLanguage(setting_String, true, false, true))
- {
- LocalizationManager.SetLanguageAndCode(setting_String, LocalizationManager.GetLanguageCode(setting_String), true, false);
- return;
- }
- if (!LocalizationManager.Sources[0].IgnoreDeviceLanguage)
- {
- string supportedLanguage = LocalizationManager.GetSupportedLanguage(currentDeviceLanguage);
- if (!string.IsNullOrEmpty(supportedLanguage))
- {
- LocalizationManager.SetLanguageAndCode(supportedLanguage, LocalizationManager.GetLanguageCode(supportedLanguage), false, false);
- return;
- }
- }
- int i = 0;
- int count = LocalizationManager.Sources.Count;
- while (i < count)
- {
- if (LocalizationManager.Sources[i].mLanguages.Count > 0)
- {
- for (int j = 0; j < LocalizationManager.Sources[i].mLanguages.Count; j++)
- {
- if (LocalizationManager.Sources[i].mLanguages[j].IsEnabled())
- {
- LocalizationManager.SetLanguageAndCode(LocalizationManager.Sources[i].mLanguages[j].Name, LocalizationManager.Sources[i].mLanguages[j].Code, false, false);
- return;
- }
- }
- }
- i++;
- }
- }
- public static bool HasLanguage(string Language, bool AllowDiscartingRegion = true, bool Initialize = true, bool SkipDisabled = true)
- {
- if (Initialize)
- {
- LocalizationManager.InitializeIfNeeded();
- }
- int i = 0;
- int count = LocalizationManager.Sources.Count;
- while (i < count)
- {
- if (LocalizationManager.Sources[i].GetLanguageIndex(Language, false, SkipDisabled) >= 0)
- {
- return true;
- }
- i++;
- }
- if (AllowDiscartingRegion)
- {
- int j = 0;
- int count2 = LocalizationManager.Sources.Count;
- while (j < count2)
- {
- if (LocalizationManager.Sources[j].GetLanguageIndex(Language, true, SkipDisabled) >= 0)
- {
- return true;
- }
- j++;
- }
- }
- return false;
- }
- public static string GetSupportedLanguage(string Language)
- {
- string languageCode = GoogleLanguages.GetLanguageCode(Language, false);
- if (!string.IsNullOrEmpty(languageCode))
- {
- int i = 0;
- int count = LocalizationManager.Sources.Count;
- while (i < count)
- {
- int languageIndexFromCode = LocalizationManager.Sources[i].GetLanguageIndexFromCode(languageCode, true);
- if (languageIndexFromCode >= 0)
- {
- return LocalizationManager.Sources[i].mLanguages[languageIndexFromCode].Name;
- }
- i++;
- }
- int j = 0;
- int count2 = LocalizationManager.Sources.Count;
- while (j < count2)
- {
- int languageIndexFromCode2 = LocalizationManager.Sources[j].GetLanguageIndexFromCode(languageCode, false);
- if (languageIndexFromCode2 >= 0)
- {
- return LocalizationManager.Sources[j].mLanguages[languageIndexFromCode2].Name;
- }
- j++;
- }
- }
- int k = 0;
- int count3 = LocalizationManager.Sources.Count;
- while (k < count3)
- {
- int languageIndex = LocalizationManager.Sources[k].GetLanguageIndex(Language, false, true);
- if (languageIndex >= 0)
- {
- return LocalizationManager.Sources[k].mLanguages[languageIndex].Name;
- }
- k++;
- }
- int l = 0;
- int count4 = LocalizationManager.Sources.Count;
- while (l < count4)
- {
- int languageIndex2 = LocalizationManager.Sources[l].GetLanguageIndex(Language, true, true);
- if (languageIndex2 >= 0)
- {
- return LocalizationManager.Sources[l].mLanguages[languageIndex2].Name;
- }
- l++;
- }
- return string.Empty;
- }
- public static string GetLanguageCode(string Language)
- {
- if (LocalizationManager.Sources.Count == 0)
- {
- LocalizationManager.UpdateSources();
- }
- int i = 0;
- int count = LocalizationManager.Sources.Count;
- while (i < count)
- {
- int languageIndex = LocalizationManager.Sources[i].GetLanguageIndex(Language, true, true);
- if (languageIndex >= 0)
- {
- return LocalizationManager.Sources[i].mLanguages[languageIndex].Code;
- }
- i++;
- }
- return string.Empty;
- }
- public static string GetLanguageFromCode(string Code, bool exactMatch = true)
- {
- if (LocalizationManager.Sources.Count == 0)
- {
- LocalizationManager.UpdateSources();
- }
- int i = 0;
- int count = LocalizationManager.Sources.Count;
- while (i < count)
- {
- int languageIndexFromCode = LocalizationManager.Sources[i].GetLanguageIndexFromCode(Code, exactMatch);
- if (languageIndexFromCode >= 0)
- {
- return LocalizationManager.Sources[i].mLanguages[languageIndexFromCode].Name;
- }
- i++;
- }
- return string.Empty;
- }
- public static List<string> GetAllLanguages(bool SkipDisabled = true)
- {
- if (LocalizationManager.Sources.Count == 0)
- {
- LocalizationManager.UpdateSources();
- }
- List<string> Languages = new List<string>();
- int i = 0;
- int count = LocalizationManager.Sources.Count;
- while (i < count)
- {
- Languages.AddRange(from x in LocalizationManager.Sources[i].GetLanguages(SkipDisabled)
- where !Languages.Contains(x)
- select x);
- i++;
- }
- return Languages;
- }
- public static List<string> GetAllLanguagesCode(bool allowRegions = true, bool SkipDisabled = true)
- {
- List<string> Languages = new List<string>();
- int i = 0;
- int count = LocalizationManager.Sources.Count;
- while (i < count)
- {
- Languages.AddRange(from x in LocalizationManager.Sources[i].GetLanguagesCode(allowRegions, SkipDisabled)
- where !Languages.Contains(x)
- select x);
- i++;
- }
- return Languages;
- }
- public static bool IsLanguageEnabled(string Language)
- {
- int i = 0;
- int count = LocalizationManager.Sources.Count;
- while (i < count)
- {
- if (!LocalizationManager.Sources[i].IsLanguageEnabled(Language))
- {
- return false;
- }
- i++;
- }
- return true;
- }
- private static void LoadCurrentLanguage()
- {
- for (int i = 0; i < LocalizationManager.Sources.Count; i++)
- {
- int languageIndex = LocalizationManager.Sources[i].GetLanguageIndex(LocalizationManager.mCurrentLanguage, true, false);
- LocalizationManager.Sources[i].LoadLanguage(languageIndex, true, true, true, false);
- }
- }
- public static void ApplyLocalizationParams(ref string translation)
- {
- LocalizationManager.ApplyLocalizationParams(ref translation, (string p) => LocalizationManager.GetLocalizationParam(p, null));
- }
- public static void ApplyLocalizationParams(ref string translation, GameObject root)
- {
- LocalizationManager.ApplyLocalizationParams(ref translation, (string p) => LocalizationManager.GetLocalizationParam(p, root));
- }
- public static void ApplyLocalizationParams(ref string translation, Dictionary<string, object> parameters)
- {
- LocalizationManager.ApplyLocalizationParams(ref translation, delegate(string p)
- {
- object result = null;
- if (parameters.TryGetValue(p, out result))
- {
- return result;
- }
- return null;
- });
- }
- public static void ApplyLocalizationParams(ref string translation, LocalizationManager._GetParam getParam)
- {
- if (translation == null)
- {
- return;
- }
- string text = null;
- int num = translation.Length;
- int num2 = 0;
- while (num2 >= 0 && num2 < translation.Length)
- {
- int num3 = translation.IndexOf("{[", num2);
- if (num3 < 0)
- {
- break;
- }
- int num4 = translation.IndexOf("]}", num3);
- if (num4 < 0)
- {
- break;
- }
- int num5 = translation.IndexOf("{[", num3 + 1);
- if (num5 > 0 && num5 < num4)
- {
- num2 = num5;
- }
- else
- {
- int num6 = (translation[num3 + 2] != '#') ? 2 : 3;
- string param = translation.Substring(num3 + num6, num4 - num3 - num6);
- string text2 = (string)getParam(param);
- if (text2 != null)
- {
- string text3;
- if (LocalizationManager.TryGetTranslation(text2, out text3, true, 0, true, false, null, null))
- {
- text2 = text3;
- }
- string oldValue = translation.Substring(num3, num4 - num3 + 2);
- translation = translation.Replace(oldValue, text2);
- int n = 0;
- if (int.TryParse(text2, out n))
- {
- text = GoogleLanguages.GetPluralType(LocalizationManager.CurrentLanguageCode, n).ToString();
- }
- num2 = num3 + text2.Length;
- }
- else
- {
- num2 = num4 + 2;
- }
- }
- }
- if (text != null)
- {
- string text4 = "[i2p_" + text + "]";
- int num7 = translation.IndexOf(text4, StringComparison.OrdinalIgnoreCase);
- if (num7 < 0)
- {
- num7 = 0;
- }
- else
- {
- num7 += text4.Length;
- }
- num = translation.IndexOf("[i2p_", num7 + 1, StringComparison.OrdinalIgnoreCase);
- if (num < 0)
- {
- num = translation.Length;
- }
- translation = translation.Substring(num7, num - num7);
- }
- }
- internal static string GetLocalizationParam(string ParamName, GameObject root)
- {
- if (root)
- {
- MonoBehaviour[] components = root.GetComponents<MonoBehaviour>();
- int i = 0;
- int num = components.Length;
- while (i < num)
- {
- ILocalizationParamsManager localizationParamsManager = components[i] as ILocalizationParamsManager;
- if (localizationParamsManager != null && components[i].enabled)
- {
- string parameterValue = localizationParamsManager.GetParameterValue(ParamName);
- if (parameterValue != null)
- {
- return parameterValue;
- }
- }
- i++;
- }
- }
- int j = 0;
- int count = LocalizationManager.ParamManagers.Count;
- while (j < count)
- {
- string parameterValue = LocalizationManager.ParamManagers[j].GetParameterValue(ParamName);
- if (parameterValue != null)
- {
- return parameterValue;
- }
- j++;
- }
- return null;
- }
- private static string GetPluralType(MatchCollection matches, string langCode, LocalizationManager._GetParam getParam)
- {
- int i = 0;
- int count = matches.Count;
- while (i < count)
- {
- Match match = matches[i];
- string value = match.Groups[match.Groups.Count - 1].Value;
- string text = (string)getParam(value);
- if (text != null)
- {
- int n = 0;
- if (int.TryParse(text, out n))
- {
- return GoogleLanguages.GetPluralType(langCode, n).ToString();
- }
- }
- i++;
- }
- return null;
- }
- public static string ApplyRTLfix(string line)
- {
- return LocalizationManager.ApplyRTLfix(line, 0, true);
- }
- public static string ApplyRTLfix(string line, int maxCharacters, bool ignoreNumbers)
- {
- if (string.IsNullOrEmpty(line))
- {
- return line;
- }
- char c = line[0];
- if (c == '!' || c == '.' || c == '?')
- {
- line = line.Substring(1) + c;
- }
- int num = -1;
- int num2 = 0;
- int num3 = 40000;
- num2 = 0;
- List<string> list = new List<string>();
- while (I2Utils.FindNextTag(line, num2, out num, out num2))
- {
- string str = "@@" + (char)(num3 + list.Count) + "@@";
- list.Add(line.Substring(num, num2 - num + 1));
- line = line.Substring(0, num) + str + line.Substring(num2 + 1);
- num2 = num + 5;
- }
- line = line.Replace("\r\n", "\n");
- line = I2Utils.SplitLine(line, maxCharacters);
- line = RTLFixer.Fix(line, true, !ignoreNumbers);
- for (int i = 0; i < list.Count; i++)
- {
- int length = line.Length;
- for (int j = 0; j < length; j++)
- {
- if (line[j] == '@' && line[j + 1] == '@' && (int)line[j + 2] >= num3 && line[j + 3] == '@' && line[j + 4] == '@')
- {
- int num4 = (int)line[j + 2] - num3;
- if (num4 % 2 == 0)
- {
- num4++;
- }
- else
- {
- num4--;
- }
- if (num4 >= list.Count)
- {
- num4 = list.Count - 1;
- }
- line = line.Substring(0, j) + list[num4] + line.Substring(j + 5);
- break;
- }
- }
- }
- return line;
- }
- public static string FixRTL_IfNeeded(string text, int maxCharacters = 0, bool ignoreNumber = false)
- {
- if (LocalizationManager.IsRight2Left)
- {
- return LocalizationManager.ApplyRTLfix(text, maxCharacters, ignoreNumber);
- }
- return text;
- }
- public static bool IsRTL(string Code)
- {
- return Array.IndexOf<string>(LocalizationManager.LanguagesRTL, Code) >= 0;
- }
- public static bool UpdateSources()
- {
- LocalizationManager.UnregisterDeletededSources();
- LocalizationManager.RegisterSourceInResources();
- return LocalizationManager.Sources.Count > 0;
- }
- private static void UnregisterDeletededSources()
- {
- for (int i = LocalizationManager.Sources.Count - 1; i >= 0; i--)
- {
- if (LocalizationManager.Sources[i] == null)
- {
- LocalizationManager.RemoveSource(LocalizationManager.Sources[i]);
- }
- }
- }
- private static void RegisterSceneSources()
- {
- LanguageSource[] array = (LanguageSource[])Resources.FindObjectsOfTypeAll(typeof(LanguageSource));
- int i = 0;
- int num = array.Length;
- while (i < num)
- {
- if (!LocalizationManager.Sources.Contains(array[i]))
- {
- LocalizationManager.AddSource(array[i]);
- }
- i++;
- }
- }
- private static void RegisterSourceInResources()
- {
- foreach (string name in LocalizationManager.GlobalSources)
- {
- GameObject asset = ResourceManager.pInstance.GetAsset<GameObject>(name);
- LanguageSource languageSource = (!asset) ? null : asset.GetComponent<LanguageSource>();
- if (languageSource && !LocalizationManager.Sources.Contains(languageSource))
- {
- languageSource.mIsGlobalSource = true;
- LocalizationManager.AddSource(languageSource);
- }
- }
- }
- internal static void AddSource(LanguageSource Source)
- {
- if (LocalizationManager.Sources.Contains(Source))
- {
- return;
- }
- LocalizationManager.Sources.Add(Source);
- if (Source.HasGoogleSpreadsheet() && Source.GoogleUpdateFrequency != LanguageSource.eGoogleUpdateFrequency.Never)
- {
- Source.Import_Google_FromCache();
- bool justCheck = false;
- if (Source.GoogleUpdateDelay > 0f)
- {
- CoroutineManager.Start(LocalizationManager.Delayed_Import_Google(Source, Source.GoogleUpdateDelay, justCheck));
- }
- else
- {
- Source.Import_Google(false, justCheck);
- }
- }
- for (int i = 0; i < Source.mLanguages.Count<LanguageData>(); i++)
- {
- Source.mLanguages[i].SetLoaded(true);
- }
- if (Source.mDictionary.Count == 0)
- {
- Source.UpdateDictionary(true);
- }
- }
- private static IEnumerator Delayed_Import_Google(LanguageSource source, float delay, bool justCheck)
- {
- yield return new WaitForSeconds(delay);
- source.Import_Google(false, justCheck);
- yield break;
- }
- internal static void RemoveSource(LanguageSource Source)
- {
- LocalizationManager.Sources.Remove(Source);
- }
- public static bool IsGlobalSource(string SourceName)
- {
- return Array.IndexOf<string>(LocalizationManager.GlobalSources, SourceName) >= 0;
- }
- public static LanguageSource GetSourceContaining(string term, bool fallbackToFirst = true)
- {
- if (!string.IsNullOrEmpty(term))
- {
- int i = 0;
- int count = LocalizationManager.Sources.Count;
- while (i < count)
- {
- if (LocalizationManager.Sources[i].GetTermData(term, false) != null)
- {
- return LocalizationManager.Sources[i];
- }
- i++;
- }
- }
- return (!fallbackToFirst || LocalizationManager.Sources.Count <= 0) ? null : LocalizationManager.Sources[0];
- }
- public static UnityEngine.Object FindAsset(string value)
- {
- int i = 0;
- int count = LocalizationManager.Sources.Count;
- while (i < count)
- {
- UnityEngine.Object @object = LocalizationManager.Sources[i].FindAsset(value);
- if (@object)
- {
- return @object;
- }
- i++;
- }
- return null;
- }
- public static string GetCurrentDeviceLanguage()
- {
- if (string.IsNullOrEmpty(LocalizationManager.mCurrentDeviceLanguage))
- {
- LocalizationManager.DetectDeviceLanguage();
- }
- return LocalizationManager.mCurrentDeviceLanguage;
- }
- private static void DetectDeviceLanguage()
- {
- LocalizationManager.mCurrentDeviceLanguage = Application.systemLanguage.ToString();
- if (LocalizationManager.mCurrentDeviceLanguage == "ChineseSimplified")
- {
- LocalizationManager.mCurrentDeviceLanguage = "Chinese (Simplified)";
- }
- if (LocalizationManager.mCurrentDeviceLanguage == "ChineseTraditional")
- {
- LocalizationManager.mCurrentDeviceLanguage = "Chinese (Traditional)";
- }
- }
- public static void RegisterTarget(ILocalizeTargetDescriptor desc)
- {
- if (LocalizationManager.mLocalizeTargets.FindIndex((ILocalizeTargetDescriptor x) => x.Name == desc.Name) != -1)
- {
- return;
- }
- for (int i = 0; i < LocalizationManager.mLocalizeTargets.Count; i++)
- {
- if (LocalizationManager.mLocalizeTargets[i].Priority > desc.Priority)
- {
- LocalizationManager.mLocalizeTargets.Insert(i, desc);
- return;
- }
- }
- LocalizationManager.mLocalizeTargets.Add(desc);
- }
- [DebuggerBrowsable(DebuggerBrowsableState.Never)]
- public static event LocalizationManager.OnLocalizeCallback OnLocalizeEvent;
- public static string GetTranslation(string Term, bool FixForRTL = true, int maxLineLengthForRTL = 0, bool ignoreRTLnumbers = true, bool applyParameters = false, GameObject localParametersRoot = null, string overrideLanguage = null)
- {
- string result = null;
- LocalizationManager.TryGetTranslation(Term, out result, FixForRTL, maxLineLengthForRTL, ignoreRTLnumbers, applyParameters, localParametersRoot, overrideLanguage);
- return result;
- }
- public static string GetTermTranslation(string Term, bool FixForRTL = true, int maxLineLengthForRTL = 0, bool ignoreRTLnumbers = true, bool applyParameters = false, GameObject localParametersRoot = null, string overrideLanguage = null)
- {
- return LocalizationManager.GetTranslation(Term, FixForRTL, maxLineLengthForRTL, ignoreRTLnumbers, applyParameters, localParametersRoot, overrideLanguage);
- }
- public static bool TryGetTranslation(string Term, out string Translation, bool FixForRTL = true, int maxLineLengthForRTL = 0, bool ignoreRTLnumbers = true, bool applyParameters = false, GameObject localParametersRoot = null, string overrideLanguage = null)
- {
- Translation = null;
- if (string.IsNullOrEmpty(Term))
- {
- return false;
- }
- LocalizationManager.InitializeIfNeeded();
- int i = 0;
- int count = LocalizationManager.Sources.Count;
- while (i < count)
- {
- if (LocalizationManager.Sources[i].TryGetTranslation(Term, out Translation, overrideLanguage, null, false, false))
- {
- if (applyParameters)
- {
- LocalizationManager.ApplyLocalizationParams(ref Translation, localParametersRoot);
- }
- if (LocalizationManager.IsRight2Left && FixForRTL)
- {
- Translation = LocalizationManager.ApplyRTLfix(Translation, maxLineLengthForRTL, ignoreRTLnumbers);
- }
- return true;
- }
- i++;
- }
- return false;
- }
- public static string GetAppName(string languageCode)
- {
- if (!string.IsNullOrEmpty(languageCode))
- {
- for (int i = 0; i < LocalizationManager.Sources.Count; i++)
- {
- if (!string.IsNullOrEmpty(LocalizationManager.Sources[i].mTerm_AppName))
- {
- int languageIndexFromCode = LocalizationManager.Sources[i].GetLanguageIndexFromCode(languageCode, false);
- if (languageIndexFromCode >= 0)
- {
- TermData termData = LocalizationManager.Sources[i].GetTermData(LocalizationManager.Sources[i].mTerm_AppName, false);
- if (termData != null)
- {
- string translation = termData.GetTranslation(languageIndexFromCode, null);
- if (!string.IsNullOrEmpty(translation))
- {
- return translation;
- }
- }
- }
- }
- }
- }
- return Application.productName;
- }
- public static void LocalizeAll(bool Force = false)
- {
- LocalizationManager.LoadCurrentLanguage();
- if (!Application.isPlaying)
- {
- LocalizationManager.DoLocalizeAll(Force);
- return;
- }
- LocalizationManager.mLocalizeIsScheduledWithForcedValue = (LocalizationManager.mLocalizeIsScheduledWithForcedValue || Force);
- if (LocalizationManager.mLocalizeIsScheduled)
- {
- return;
- }
- CoroutineManager.Start(LocalizationManager.Coroutine_LocalizeAll());
- }
- private static IEnumerator Coroutine_LocalizeAll()
- {
- LocalizationManager.mLocalizeIsScheduled = true;
- yield return null;
- LocalizationManager.mLocalizeIsScheduled = false;
- bool force = LocalizationManager.mLocalizeIsScheduledWithForcedValue;
- LocalizationManager.mLocalizeIsScheduledWithForcedValue = false;
- LocalizationManager.DoLocalizeAll(force);
- yield break;
- }
- private static void DoLocalizeAll(bool Force = false)
- {
- Localize[] array = (Localize[])Resources.FindObjectsOfTypeAll(typeof(Localize));
- int i = 0;
- int num = array.Length;
- while (i < num)
- {
- Localize localize = array[i];
- localize.OnLocalize(Force);
- i++;
- }
- if (LocalizationManager.OnLocalizeEvent != null)
- {
- LocalizationManager.OnLocalizeEvent();
- }
- ResourceManager.pInstance.CleanResourceCache();
- }
- public static List<string> GetCategories()
- {
- List<string> list = new List<string>();
- int i = 0;
- int count = LocalizationManager.Sources.Count;
- while (i < count)
- {
- LocalizationManager.Sources[i].GetCategories(false, list);
- i++;
- }
- return list;
- }
- public static List<string> GetTermsList(string Category = null)
- {
- if (LocalizationManager.Sources.Count == 0)
- {
- LocalizationManager.UpdateSources();
- }
- if (LocalizationManager.Sources.Count == 1)
- {
- return LocalizationManager.Sources[0].GetTermsList(Category);
- }
- HashSet<string> hashSet = new HashSet<string>();
- int i = 0;
- int count = LocalizationManager.Sources.Count;
- while (i < count)
- {
- hashSet.UnionWith(LocalizationManager.Sources[i].GetTermsList(Category));
- i++;
- }
- return new List<string>(hashSet);
- }
- public static TermData GetTermData(string term)
- {
- LocalizationManager.InitializeIfNeeded();
- int i = 0;
- int count = LocalizationManager.Sources.Count;
- while (i < count)
- {
- TermData termData = LocalizationManager.Sources[i].GetTermData(term, false);
- if (termData != null)
- {
- return termData;
- }
- i++;
- }
- return null;
- }
- private static string mCurrentLanguage;
- private static string mLanguageCode;
- private static CultureInfo mCurrentCulture;
- private static bool mChangeCultureInfo = false;
- public static bool IsRight2Left = false;
- public static bool HasJoinedWords = false;
- public static List<ILocalizationParamsManager> ParamManagers = new List<ILocalizationParamsManager>();
- private static string[] LanguagesRTL = new string[]
- {
- "ar-DZ",
- "ar",
- "ar-BH",
- "ar-EG",
- "ar-IQ",
- "ar-JO",
- "ar-KW",
- "ar-LB",
- "ar-LY",
- "ar-MA",
- "ar-OM",
- "ar-QA",
- "ar-SA",
- "ar-SY",
- "ar-TN",
- "ar-AE",
- "ar-YE",
- "he",
- "ur",
- "ji"
- };
- public static List<LanguageSource> Sources = new List<LanguageSource>();
- public static string[] GlobalSources = new string[]
- {
- "I2Languages"
- };
- private static string mCurrentDeviceLanguage;
- public static List<ILocalizeTargetDescriptor> mLocalizeTargets = new List<ILocalizeTargetDescriptor>();
- private static bool mLocalizeIsScheduled = false;
- private static bool mLocalizeIsScheduledWithForcedValue = false;
- public static bool HighlightLocalizedTargets = false;
- public delegate object _GetParam(string param);
- public delegate void OnLocalizeCallback();
- }
- }
|