LocalizeDropdown.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. using System.Collections.Generic;
  2. using TMPro;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. namespace I2.Loc
  6. {
  7. #if !UNITY_5_0 && !UNITY_5_1
  8. [AddComponentMenu("I2/Localization/Localize Dropdown")]
  9. public class LocalizeDropdown : MonoBehaviour
  10. {
  11. public List<string> _Terms = new List<string>();
  12. public void Start()
  13. {
  14. LocalizationManager.OnLocalizeEvent += OnLocalize;
  15. OnLocalize();
  16. }
  17. public void OnDestroy()
  18. {
  19. LocalizationManager.OnLocalizeEvent -= OnLocalize;
  20. }
  21. void OnEnable()
  22. {
  23. if (_Terms.Count == 0)
  24. FillValues();
  25. OnLocalize ();
  26. }
  27. public void OnLocalize()
  28. {
  29. if (!enabled || gameObject==null || !gameObject.activeInHierarchy)
  30. return;
  31. if (string.IsNullOrEmpty(LocalizationManager.CurrentLanguage))
  32. return;
  33. UpdateLocalization();
  34. }
  35. void FillValues()
  36. {
  37. var _Dropdown = GetComponent<Dropdown>();
  38. if (_Dropdown == null && I2Utils.IsPlaying())
  39. {
  40. #if TextMeshPro
  41. FillValuesTMPro();
  42. #endif
  43. return;
  44. }
  45. foreach (var term in _Dropdown.options)
  46. {
  47. _Terms.Add(term.text);
  48. }
  49. }
  50. public void UpdateLocalization()
  51. {
  52. var _Dropdown = GetComponent<Dropdown>();
  53. if (_Dropdown == null)
  54. {
  55. #if TextMeshPro
  56. UpdateLocalizationTMPro();
  57. #endif
  58. return;
  59. }
  60. _Dropdown.options.Clear();
  61. foreach (var term in _Terms)
  62. {
  63. var translation = LocalizationManager.GetTranslation(term);
  64. _Dropdown.options.Add( new Dropdown.OptionData( translation ) );
  65. }
  66. _Dropdown.RefreshShownValue();
  67. }
  68. #if TextMeshPro
  69. public void UpdateLocalizationTMPro()
  70. {
  71. var _Dropdown = GetComponent<TMP_Dropdown>();
  72. if (_Dropdown == null)
  73. return;
  74. _Dropdown.options.Clear();
  75. foreach (var term in _Terms)
  76. {
  77. var translation = LocalizationManager.GetTranslation(term);
  78. _Dropdown.options.Add(new TMP_Dropdown.OptionData(translation));
  79. }
  80. _Dropdown.RefreshShownValue();
  81. }
  82. void FillValuesTMPro()
  83. {
  84. var _Dropdown = GetComponent<TMP_Dropdown>();
  85. if (_Dropdown == null)
  86. return;
  87. foreach (var term in _Dropdown.options)
  88. {
  89. _Terms.Add(term.text);
  90. }
  91. }
  92. #endif
  93. }
  94. #endif
  95. }