123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using UnityEngine;
- using UnityEngine.Events;
- namespace I2.Loc
- {
- [AddComponentMenu("I2/Localization/I2 Localize")]
- public class Localize : MonoBehaviour
- {
- public string Term
- {
- get
- {
- return this.mTerm;
- }
- set
- {
- this.SetTerm(value);
- }
- }
- public string SecondaryTerm
- {
- get
- {
- return this.mTermSecondary;
- }
- set
- {
- this.SetTerm(null, value);
- }
- }
- private void Awake()
- {
- this.UpdateAssetDictionary();
- this.FindTarget();
- if (this.LocalizeOnAwake)
- {
- this.OnLocalize(false);
- }
- }
- private void OnEnable()
- {
- this.OnLocalize(false);
- }
- public bool HasCallback()
- {
- return this.LocalizeCallBack.HasCallback() || this.LocalizeEvent.GetPersistentEventCount() > 0;
- }
- public void OnLocalize(bool Force = false)
- {
- if (!Force && (!base.enabled || base.gameObject == null || !base.gameObject.activeInHierarchy))
- {
- return;
- }
- if (string.IsNullOrEmpty(LocalizationManager.CurrentLanguage))
- {
- return;
- }
- if (!this.AlwaysForceLocalize && !Force && !this.HasCallback() && this.LastLocalizedLanguage == LocalizationManager.CurrentLanguage)
- {
- return;
- }
- this.LastLocalizedLanguage = LocalizationManager.CurrentLanguage;
- if (string.IsNullOrEmpty(this.FinalTerm) || string.IsNullOrEmpty(this.FinalSecondaryTerm))
- {
- this.GetFinalTerms(out this.FinalTerm, out this.FinalSecondaryTerm);
- }
- bool flag = I2Utils.IsPlaying() && this.HasCallback();
- if (!flag && string.IsNullOrEmpty(this.FinalTerm) && string.IsNullOrEmpty(this.FinalSecondaryTerm))
- {
- return;
- }
- Localize.CallBackTerm = this.FinalTerm;
- Localize.CallBackSecondaryTerm = this.FinalSecondaryTerm;
- Localize.MainTranslation = ((!string.IsNullOrEmpty(this.FinalTerm) && !(this.FinalTerm == "-")) ? LocalizationManager.GetTranslation(this.FinalTerm, false, 0, true, false, null, null) : null);
- Localize.SecondaryTranslation = ((!string.IsNullOrEmpty(this.FinalSecondaryTerm) && !(this.FinalSecondaryTerm == "-")) ? LocalizationManager.GetTranslation(this.FinalSecondaryTerm, false, 0, true, false, null, null) : null);
- if (!flag && string.IsNullOrEmpty(this.FinalTerm) && string.IsNullOrEmpty(Localize.SecondaryTranslation))
- {
- return;
- }
- Localize.CurrentLocalizeComponent = this;
- this.LocalizeCallBack.Execute(this);
- this.LocalizeEvent.Invoke();
- LocalizationManager.ApplyLocalizationParams(ref Localize.MainTranslation, base.gameObject);
- if (!this.FindTarget())
- {
- return;
- }
- bool flag2 = LocalizationManager.IsRight2Left && !this.IgnoreRTL;
- if (Localize.MainTranslation != null)
- {
- switch (this.PrimaryTermModifier)
- {
- case Localize.TermModification.ToUpper:
- Localize.MainTranslation = Localize.MainTranslation.ToUpper();
- break;
- case Localize.TermModification.ToLower:
- Localize.MainTranslation = Localize.MainTranslation.ToLower();
- break;
- case Localize.TermModification.ToUpperFirst:
- Localize.MainTranslation = GoogleTranslation.UppercaseFirst(Localize.MainTranslation);
- break;
- case Localize.TermModification.ToTitle:
- Localize.MainTranslation = GoogleTranslation.TitleCase(Localize.MainTranslation);
- break;
- }
- if (!string.IsNullOrEmpty(this.TermPrefix))
- {
- Localize.MainTranslation = ((!flag2) ? (this.TermPrefix + Localize.MainTranslation) : (Localize.MainTranslation + this.TermPrefix));
- }
- if (!string.IsNullOrEmpty(this.TermSuffix))
- {
- Localize.MainTranslation = ((!flag2) ? (Localize.MainTranslation + this.TermSuffix) : (this.TermSuffix + Localize.MainTranslation));
- }
- if (this.AddSpacesToJoinedLanguages && LocalizationManager.HasJoinedWords && !string.IsNullOrEmpty(Localize.MainTranslation))
- {
- StringBuilder stringBuilder = new StringBuilder();
- stringBuilder.Append(Localize.MainTranslation[0]);
- int i = 1;
- int length = Localize.MainTranslation.Length;
- while (i < length)
- {
- stringBuilder.Append(' ');
- stringBuilder.Append(Localize.MainTranslation[i]);
- i++;
- }
- Localize.MainTranslation = stringBuilder.ToString();
- }
- if (flag2 && this.mLocalizeTarget.AllowMainTermToBeRTL() && !string.IsNullOrEmpty(Localize.MainTranslation))
- {
- Localize.MainTranslation = LocalizationManager.ApplyRTLfix(Localize.MainTranslation, this.MaxCharactersInRTL, this.IgnoreNumbersInRTL);
- }
- }
- if (Localize.SecondaryTranslation != null)
- {
- switch (this.SecondaryTermModifier)
- {
- case Localize.TermModification.ToUpper:
- Localize.SecondaryTranslation = Localize.SecondaryTranslation.ToUpper();
- break;
- case Localize.TermModification.ToLower:
- Localize.SecondaryTranslation = Localize.SecondaryTranslation.ToLower();
- break;
- case Localize.TermModification.ToUpperFirst:
- Localize.SecondaryTranslation = GoogleTranslation.UppercaseFirst(Localize.SecondaryTranslation);
- break;
- case Localize.TermModification.ToTitle:
- Localize.SecondaryTranslation = GoogleTranslation.TitleCase(Localize.SecondaryTranslation);
- break;
- }
- if (flag2 && this.mLocalizeTarget.AllowSecondTermToBeRTL() && !string.IsNullOrEmpty(Localize.SecondaryTranslation))
- {
- Localize.SecondaryTranslation = LocalizationManager.ApplyRTLfix(Localize.SecondaryTranslation);
- }
- }
- if (LocalizationManager.HighlightLocalizedTargets)
- {
- Localize.MainTranslation = "LOC:" + this.FinalTerm;
- }
- this.mLocalizeTarget.DoLocalize(this, Localize.MainTranslation, Localize.SecondaryTranslation);
- Localize.CurrentLocalizeComponent = null;
- }
- public bool FindTarget()
- {
- if (this.mLocalizeTarget != null && this.mLocalizeTarget.IsValid(this))
- {
- return true;
- }
- if (this.mLocalizeTarget != null)
- {
- UnityEngine.Object.DestroyImmediate(this.mLocalizeTarget);
- this.mLocalizeTarget = null;
- this.mLocalizeTargetName = null;
- }
- if (!string.IsNullOrEmpty(this.mLocalizeTargetName))
- {
- foreach (ILocalizeTargetDescriptor localizeTargetDescriptor in LocalizationManager.mLocalizeTargets)
- {
- if (this.mLocalizeTargetName == localizeTargetDescriptor.GetTargetType().ToString())
- {
- if (localizeTargetDescriptor.CanLocalize(this))
- {
- this.mLocalizeTarget = localizeTargetDescriptor.CreateTarget(this);
- }
- if (this.mLocalizeTarget != null)
- {
- return true;
- }
- }
- }
- }
- foreach (ILocalizeTargetDescriptor localizeTargetDescriptor2 in LocalizationManager.mLocalizeTargets)
- {
- if (localizeTargetDescriptor2.CanLocalize(this))
- {
- this.mLocalizeTarget = localizeTargetDescriptor2.CreateTarget(this);
- this.mLocalizeTargetName = localizeTargetDescriptor2.GetTargetType().ToString();
- if (this.mLocalizeTarget != null)
- {
- return true;
- }
- }
- }
- return false;
- }
- public void GetFinalTerms(out string primaryTerm, out string secondaryTerm)
- {
- primaryTerm = string.Empty;
- secondaryTerm = string.Empty;
- if (!this.FindTarget())
- {
- return;
- }
- if (this.mLocalizeTarget != null)
- {
- this.mLocalizeTarget.GetFinalTerms(this, this.mTerm, this.mTermSecondary, out primaryTerm, out secondaryTerm);
- primaryTerm = I2Utils.RemoveNonASCII(primaryTerm, false);
- }
- if (!string.IsNullOrEmpty(this.mTerm))
- {
- primaryTerm = this.mTerm;
- }
- if (!string.IsNullOrEmpty(this.mTermSecondary))
- {
- secondaryTerm = this.mTermSecondary;
- }
- if (primaryTerm != null)
- {
- primaryTerm = primaryTerm.Trim();
- }
- if (secondaryTerm != null)
- {
- secondaryTerm = secondaryTerm.Trim();
- }
- }
- public string GetMainTargetsText()
- {
- string text = null;
- string text2 = null;
- if (this.mLocalizeTarget != null)
- {
- this.mLocalizeTarget.GetFinalTerms(this, null, null, out text, out text2);
- }
- return (!string.IsNullOrEmpty(text)) ? text : this.mTerm;
- }
- public void SetFinalTerms(string Main, string Secondary, out string primaryTerm, out string secondaryTerm, bool RemoveNonASCII)
- {
- primaryTerm = ((!RemoveNonASCII) ? Main : I2Utils.RemoveNonASCII(Main, false));
- secondaryTerm = Secondary;
- }
- public void SetTerm(string primary)
- {
- if (!string.IsNullOrEmpty(primary))
- {
- this.mTerm = primary;
- this.FinalTerm = primary;
- }
- this.OnLocalize(true);
- }
- public void SetTerm(string primary, string secondary)
- {
- if (!string.IsNullOrEmpty(primary))
- {
- this.mTerm = primary;
- this.FinalTerm = primary;
- }
- this.mTermSecondary = secondary;
- this.FinalSecondaryTerm = secondary;
- this.OnLocalize(true);
- }
- internal T GetSecondaryTranslatedObj<T>(ref string mainTranslation, ref string secondaryTranslation) where T : UnityEngine.Object
- {
- string text;
- string text2;
- this.DeserializeTranslation(mainTranslation, out text, out text2);
- T t = (T)((object)null);
- if (!string.IsNullOrEmpty(text2))
- {
- t = this.GetObject<T>(text2);
- if (t != null)
- {
- mainTranslation = text;
- secondaryTranslation = text2;
- }
- }
- if (t == null)
- {
- t = this.GetObject<T>(secondaryTranslation);
- }
- return t;
- }
- public void UpdateAssetDictionary()
- {
- this.TranslatedObjects.RemoveAll((UnityEngine.Object x) => x == null);
- this.mAssetDictionary = this.TranslatedObjects.Distinct<UnityEngine.Object>().ToDictionary((UnityEngine.Object o) => o.name);
- }
- internal T GetObject<T>(string Translation) where T : UnityEngine.Object
- {
- if (string.IsNullOrEmpty(Translation))
- {
- return (T)((object)null);
- }
- T translatedObject = this.GetTranslatedObject<T>(Translation);
- if (translatedObject == null)
- {
- translatedObject = this.GetTranslatedObject<T>(Translation);
- }
- return translatedObject;
- }
- private T GetTranslatedObject<T>(string Translation) where T : UnityEngine.Object
- {
- return this.FindTranslatedObject<T>(Translation);
- }
- private void DeserializeTranslation(string translation, out string value, out string secondary)
- {
- if (!string.IsNullOrEmpty(translation) && translation.Length > 1 && translation[0] == '[')
- {
- int num = translation.IndexOf(']');
- if (num > 0)
- {
- secondary = translation.Substring(1, num - 1);
- value = translation.Substring(num + 1);
- return;
- }
- }
- value = translation;
- secondary = string.Empty;
- }
- public T FindTranslatedObject<T>(string value) where T : UnityEngine.Object
- {
- if (string.IsNullOrEmpty(value))
- {
- return (T)((object)null);
- }
- if (this.mAssetDictionary == null || this.mAssetDictionary.Count != this.TranslatedObjects.Count)
- {
- this.UpdateAssetDictionary();
- }
- foreach (KeyValuePair<string, UnityEngine.Object> keyValuePair in this.mAssetDictionary)
- {
- if (keyValuePair.Value is T && value.EndsWith(keyValuePair.Key, StringComparison.OrdinalIgnoreCase) && string.Compare(value, keyValuePair.Key, StringComparison.OrdinalIgnoreCase) == 0)
- {
- return (T)((object)keyValuePair.Value);
- }
- }
- T t = LocalizationManager.FindAsset(value) as T;
- if (t)
- {
- return t;
- }
- return ResourceManager.pInstance.GetAsset<T>(value);
- }
- public bool HasTranslatedObject(UnityEngine.Object Obj)
- {
- return this.TranslatedObjects.Contains(Obj) || ResourceManager.pInstance.HasAsset(Obj);
- }
- public void AddTranslatedObject(UnityEngine.Object Obj)
- {
- if (this.TranslatedObjects.Contains(Obj))
- {
- return;
- }
- this.TranslatedObjects.Add(Obj);
- this.UpdateAssetDictionary();
- }
- public void SetGlobalLanguage(string Language)
- {
- LocalizationManager.CurrentLanguage = Language;
- }
- public string mTerm = string.Empty;
- public string mTermSecondary = string.Empty;
- [NonSerialized]
- public string FinalTerm;
- [NonSerialized]
- public string FinalSecondaryTerm;
- public Localize.TermModification PrimaryTermModifier;
- public Localize.TermModification SecondaryTermModifier;
- public string TermPrefix;
- public string TermSuffix;
- public bool LocalizeOnAwake = true;
- private string LastLocalizedLanguage;
- public bool IgnoreRTL;
- public int MaxCharactersInRTL;
- public bool IgnoreNumbersInRTL = true;
- public bool CorrectAlignmentForRTL = true;
- public bool AddSpacesToJoinedLanguages;
- public List<UnityEngine.Object> TranslatedObjects = new List<UnityEngine.Object>();
- [NonSerialized]
- public Dictionary<string, UnityEngine.Object> mAssetDictionary = new Dictionary<string, UnityEngine.Object>(StringComparer.Ordinal);
- public UnityEvent LocalizeEvent = new UnityEvent();
- public static string MainTranslation;
- public static string SecondaryTranslation;
- public static string CallBackTerm;
- public static string CallBackSecondaryTerm;
- public static Localize CurrentLocalizeComponent;
- public bool AlwaysForceLocalize;
- [SerializeField]
- public EventCallback LocalizeCallBack = new EventCallback();
- public bool mGUI_ShowReferences;
- public bool mGUI_ShowTems = true;
- public bool mGUI_ShowCallback;
- public ILocalizeTarget mLocalizeTarget;
- public string mLocalizeTargetName;
- public enum TermModification
- {
- DontModify,
- ToUpper,
- ToLower,
- ToUpperFirst,
- ToTitle
- }
- }
- }
|