LocalizeTarget_UnityStandard_TextMesh.cs 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using UnityEditor;
  2. using UnityEngine;
  3. #pragma warning disable 618
  4. namespace I2.Loc
  5. {
  6. #if UNITY_EDITOR
  7. [InitializeOnLoad]
  8. #endif
  9. public class LocalizeTarget_UnityStandard_TextMesh : LocalizeTarget<TextMesh>
  10. {
  11. static LocalizeTarget_UnityStandard_TextMesh() { AutoRegister(); }
  12. [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] static void AutoRegister() { LocalizationManager.RegisterTarget(new LocalizeTargetDesc_Type<TextMesh, LocalizeTarget_UnityStandard_TextMesh> { Name = "TextMesh", Priority = 100 }); }
  13. TextAlignment mAlignment_RTL = TextAlignment.Right;
  14. TextAlignment mAlignment_LTR = TextAlignment.Left;
  15. bool mAlignmentWasRTL;
  16. bool mInitializeAlignment = true;
  17. public override eTermType GetPrimaryTermType(Localize cmp) { return eTermType.Text; }
  18. public override eTermType GetSecondaryTermType(Localize cmp) { return eTermType.Font; }
  19. public override bool CanUseSecondaryTerm() { return true; }
  20. public override bool AllowMainTermToBeRTL() { return true; }
  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 = mTarget ? mTarget.text : null;
  25. secondaryTerm = string.IsNullOrEmpty(Secondary) && mTarget.font != null ? mTarget.font.name : null;
  26. }
  27. public override void DoLocalize(Localize cmp, string mainTranslation, string secondaryTranslation)
  28. {
  29. //--[ Localize Font Object ]----------
  30. Font newFont = cmp.GetSecondaryTranslatedObj<Font>(ref mainTranslation, ref secondaryTranslation);
  31. if (newFont != null && mTarget.font != newFont)
  32. {
  33. mTarget.font = newFont;
  34. MeshRenderer rend = mTarget.GetComponentInChildren<MeshRenderer>();
  35. rend.material = newFont.material;
  36. }
  37. //--[ Localize Text ]----------
  38. if (mInitializeAlignment)
  39. {
  40. mInitializeAlignment = false;
  41. mAlignment_LTR = mAlignment_RTL = mTarget.alignment;
  42. if (LocalizationManager.IsRight2Left && mAlignment_RTL == TextAlignment.Right)
  43. mAlignment_LTR = TextAlignment.Left;
  44. if (!LocalizationManager.IsRight2Left && mAlignment_LTR == TextAlignment.Left)
  45. mAlignment_RTL = TextAlignment.Right;
  46. }
  47. if (mainTranslation != null && mTarget.text != mainTranslation)
  48. {
  49. if (cmp.CorrectAlignmentForRTL && mTarget.alignment != TextAlignment.Center)
  50. mTarget.alignment = LocalizationManager.IsRight2Left ? mAlignment_RTL : mAlignment_LTR;
  51. mTarget.font.RequestCharactersInTexture(mainTranslation);
  52. mTarget.text = mainTranslation;
  53. }
  54. }
  55. }
  56. }