LocalizationScriptManager.cs 5.1 KB

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