LocalizationScriptManager.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. using System.Globalization;
  2. using System.Linq;
  3. using System.Text;
  4. using Abp.Dependency;
  5. using Abp.Json;
  6. using Abp.Localization;
  7. namespace Abp.Web.Localization
  8. {
  9. internal class LocalizationScriptManager : ILocalizationScriptManager, ISingletonDependency
  10. {
  11. private readonly ILocalizationManager _localizationManager;
  12. private readonly ILanguageManager _languageManager;
  13. public LocalizationScriptManager(
  14. ILocalizationManager localizationManager,
  15. ILanguageManager languageManager)
  16. {
  17. _localizationManager = localizationManager;
  18. _languageManager = languageManager;
  19. }
  20. /// <inheritdoc/>
  21. public string GetScript()
  22. {
  23. return GetScript(CultureInfo.CurrentUICulture);
  24. }
  25. /// <inheritdoc/>
  26. public string GetScript(CultureInfo cultureInfo)
  27. {
  28. //NOTE: Disabled caching since it's not true (localization script is changed per user, per tenant, per culture...)
  29. return BuildAll(cultureInfo);
  30. //return _cacheManager.GetCache(AbpCacheNames.LocalizationScripts).Get(cultureInfo.Name, () => BuildAll(cultureInfo));
  31. }
  32. private string BuildAll(CultureInfo cultureInfo)
  33. {
  34. var script = new StringBuilder();
  35. script.AppendLine("(function(){");
  36. script.AppendLine();
  37. script.AppendLine(" abp.localization = abp.localization || {};");
  38. script.AppendLine();
  39. script.AppendLine(" abp.localization.currentCulture = {");
  40. script.AppendLine(" name: '" + cultureInfo.Name + "',");
  41. script.AppendLine(" displayName: '" + cultureInfo.DisplayName + "'");
  42. script.AppendLine(" };");
  43. script.AppendLine();
  44. script.Append(" abp.localization.languages = [");
  45. var languages = _languageManager.GetLanguages();
  46. for (var i = 0; i < languages.Count; i++)
  47. {
  48. var language = languages[i];
  49. script.AppendLine("{");
  50. script.AppendLine(" name: '" + language.Name + "',");
  51. script.AppendLine(" displayName: '" + language.DisplayName + "',");
  52. script.AppendLine(" icon: '" + language.Icon + "',");
  53. script.AppendLine(" isDisabled: " + language.IsDisabled.ToString().ToLowerInvariant() + ",");
  54. script.AppendLine(" isDefault: " + language.IsDefault.ToString().ToLowerInvariant());
  55. script.Append(" }");
  56. if (i < languages.Count - 1)
  57. {
  58. script.Append(" , ");
  59. }
  60. }
  61. script.AppendLine("];");
  62. script.AppendLine();
  63. if (languages.Count > 0)
  64. {
  65. var currentLanguage = _languageManager.CurrentLanguage;
  66. script.AppendLine(" abp.localization.currentLanguage = {");
  67. script.AppendLine(" name: '" + currentLanguage.Name + "',");
  68. script.AppendLine(" displayName: '" + currentLanguage.DisplayName + "',");
  69. script.AppendLine(" icon: '" + currentLanguage.Icon + "',");
  70. script.AppendLine(" isDisabled: " + currentLanguage.IsDisabled.ToString().ToLowerInvariant() + ",");
  71. script.AppendLine(" isDefault: " + currentLanguage.IsDefault.ToString().ToLowerInvariant());
  72. script.AppendLine(" };");
  73. }
  74. var sources = _localizationManager.GetAllSources().OrderBy(s => s.Name).ToArray();
  75. script.AppendLine();
  76. script.AppendLine(" abp.localization.sources = [");
  77. for (int i = 0; i < sources.Length; i++)
  78. {
  79. var source = sources[i];
  80. script.AppendLine(" {");
  81. script.AppendLine(" name: '" + source.Name + "',");
  82. script.AppendLine(" type: '" + source.GetType().Name + "'");
  83. script.AppendLine(" }" + (i < (sources.Length - 1) ? "," : ""));
  84. }
  85. script.AppendLine(" ];");
  86. script.AppendLine();
  87. script.AppendLine(" abp.localization.values = abp.localization.values || {};");
  88. script.AppendLine();
  89. foreach (var source in sources)
  90. {
  91. script.Append(" abp.localization.values['" + source.Name + "'] = ");
  92. var stringValues = source.GetAllStrings(cultureInfo).OrderBy(s => s.Name).ToList();
  93. var stringJson = stringValues
  94. .ToDictionary(_ => _.Name, _ => _.Value)
  95. .ToJsonString(indented: true);
  96. script.Append(stringJson);
  97. script.AppendLine(";");
  98. script.AppendLine();
  99. }
  100. script.AppendLine();
  101. script.Append("})();");
  102. return script.ToString();
  103. }
  104. }
  105. }