LocalizeTarget_UnityStandard_Prefab.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. using UnityEditor;
  2. using UnityEngine;
  3. #pragma warning disable 618
  4. namespace I2.Loc
  5. {
  6. public class LocalizeTargetDesc_Prefab : LocalizeTargetDesc<LocalizeTarget_UnityStandard_Prefab>
  7. {
  8. public override bool CanLocalize(Localize cmp) { return true; }
  9. }
  10. #if UNITY_EDITOR
  11. [InitializeOnLoad]
  12. #endif
  13. public class LocalizeTarget_UnityStandard_Prefab : LocalizeTarget<GameObject>
  14. {
  15. static LocalizeTarget_UnityStandard_Prefab() { AutoRegister(); }
  16. [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] static void AutoRegister() { LocalizationManager.RegisterTarget(new LocalizeTargetDesc_Prefab { Name = "Prefab", Priority = 250 }); }
  17. public override bool IsValid(Localize cmp) { return true; }
  18. public override eTermType GetPrimaryTermType(Localize cmp) { return eTermType.GameObject; }
  19. public override eTermType GetSecondaryTermType(Localize cmp) { return eTermType.Text; }
  20. public override bool CanUseSecondaryTerm() { return false; }
  21. public override bool AllowMainTermToBeRTL() { return false; }
  22. public override bool AllowSecondTermToBeRTL() { return false; }
  23. public override void GetFinalTerms ( Localize cmp, string Main, string Secondary, out string primaryTerm, out string secondaryTerm)
  24. {
  25. primaryTerm = cmp.name;
  26. secondaryTerm = null;
  27. }
  28. public override void DoLocalize(Localize cmp, string mainTranslation, string secondaryTranslation)
  29. {
  30. if (string.IsNullOrEmpty(mainTranslation))
  31. return;
  32. if (mTarget && mTarget.name == mainTranslation)
  33. return;
  34. Transform locTr = cmp.transform;
  35. var objName = mainTranslation;
  36. var idx = mainTranslation.LastIndexOfAny(LanguageSourceData.CategorySeparators);
  37. if (idx >= 0)
  38. objName = objName.Substring(idx + 1);
  39. Transform mNew = InstantiateNewPrefab(cmp, mainTranslation);
  40. if (mNew == null)
  41. return;
  42. mNew.name = objName;
  43. for (int i = locTr.childCount - 1; i >= 0; --i)
  44. {
  45. var child = locTr.GetChild(i);
  46. if (child!=mNew)
  47. {
  48. #if UNITY_EDITOR
  49. if (Application.isPlaying)
  50. Destroy(child.gameObject);
  51. else
  52. DestroyImmediate(child.gameObject);
  53. #else
  54. Object.Destroy (child.gameObject);
  55. #endif
  56. }
  57. }
  58. }
  59. Transform InstantiateNewPrefab(Localize cmp, string mainTranslation)
  60. {
  61. GameObject NewPrefab = cmp.FindTranslatedObject<GameObject>(mainTranslation);
  62. if (NewPrefab == null)
  63. return null;
  64. GameObject current = mTarget;
  65. mTarget = Instantiate(NewPrefab);
  66. if (mTarget == null)
  67. return null;
  68. Transform locTr = cmp.transform;
  69. Transform mNew = mTarget.transform;
  70. mNew.SetParent(locTr);
  71. Transform bBase = current ? current.transform : locTr;
  72. //mNew.localScale = bBase.localScale;
  73. mNew.rotation = bBase.rotation;
  74. mNew.position = bBase.position;
  75. return mNew;
  76. }
  77. }
  78. }