LocalizeTarget_UnityStandard_Child.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using UnityEditor;
  2. using UnityEngine;
  3. namespace I2.Loc
  4. {
  5. public class LocalizeTargetDesc_Child : LocalizeTargetDesc<LocalizeTarget_UnityStandard_Child>
  6. {
  7. public override bool CanLocalize(Localize cmp) { return cmp.transform.childCount > 1; }
  8. }
  9. #if UNITY_EDITOR
  10. [InitializeOnLoad]
  11. #endif
  12. public class LocalizeTarget_UnityStandard_Child : LocalizeTarget<GameObject>
  13. {
  14. static LocalizeTarget_UnityStandard_Child() { AutoRegister(); }
  15. [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] static void AutoRegister() { LocalizationManager.RegisterTarget(new LocalizeTargetDesc_Child { Name = "Child", Priority = 200 }); }
  16. public override bool IsValid(Localize cmp) { return cmp.transform.childCount>1; }
  17. public override eTermType GetPrimaryTermType(Localize cmp) { return eTermType.GameObject; }
  18. public override eTermType GetSecondaryTermType(Localize cmp) { return eTermType.Text; }
  19. public override bool CanUseSecondaryTerm() { return false; }
  20. public override bool AllowMainTermToBeRTL() { return false; }
  21. public override bool AllowSecondTermToBeRTL() { return false; }
  22. public override void GetFinalTerms(Localize cmp, string Main, string Secondary, out string primaryTerm, out string secondaryTerm)
  23. {
  24. primaryTerm = cmp.name;
  25. secondaryTerm = null;
  26. }
  27. public override void DoLocalize(Localize cmp, string mainTranslation, string secondaryTranslation)
  28. {
  29. if (string.IsNullOrEmpty(mainTranslation))
  30. return;
  31. Transform locTr = cmp.transform;
  32. var objName = mainTranslation;
  33. var idx = mainTranslation.LastIndexOfAny(LanguageSourceData.CategorySeparators);
  34. if (idx >= 0)
  35. objName = objName.Substring(idx + 1);
  36. for (int i = 0; i < locTr.childCount; ++i)
  37. {
  38. var child = locTr.GetChild(i);
  39. child.gameObject.SetActive(child.name == objName);
  40. }
  41. }
  42. }
  43. }