ResourceFileLocalizationSource.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. using System.Collections.Generic;
  2. using System.Globalization;
  3. using System.Resources;
  4. using Abp.Configuration.Startup;
  5. using Abp.Dependency;
  6. using Castle.Core.Logging;
  7. using System.Collections;
  8. using System.Collections.Immutable;
  9. using System.Linq;
  10. namespace Abp.Localization.Sources.Resource
  11. {
  12. /// <summary>
  13. /// This class is used to simplify to create a localization source that
  14. /// uses resource a file.
  15. /// </summary>
  16. public class ResourceFileLocalizationSource : ILocalizationSource, ISingletonDependency
  17. {
  18. /// <summary>
  19. /// Unique Name of the source.
  20. /// </summary>
  21. public string Name { get; }
  22. /// <summary>
  23. /// Reference to the <see cref="ResourceManager"/> object related to this localization source.
  24. /// </summary>
  25. public ResourceManager ResourceManager { get; }
  26. private ILogger _logger;
  27. private ILocalizationConfiguration _configuration;
  28. /// <param name="name">Unique Name of the source</param>
  29. /// <param name="resourceManager">Reference to the <see cref="ResourceManager"/> object related to this localization source</param>
  30. public ResourceFileLocalizationSource(string name, ResourceManager resourceManager)
  31. {
  32. Name = name;
  33. ResourceManager = resourceManager;
  34. }
  35. /// <summary>
  36. /// This method is called by ABP before first usage.
  37. /// </summary>
  38. public virtual void Initialize(ILocalizationConfiguration configuration, IIocResolver iocResolver)
  39. {
  40. _configuration = configuration;
  41. _logger = iocResolver.IsRegistered(typeof(ILoggerFactory))
  42. ? iocResolver.Resolve<ILoggerFactory>().Create(typeof(ResourceFileLocalizationSource))
  43. : NullLogger.Instance;
  44. }
  45. public virtual string GetString(string name)
  46. {
  47. var value = GetStringOrNull(name);
  48. if (value == null)
  49. {
  50. return ReturnGivenNameOrThrowException(name, CultureInfo.CurrentUICulture);
  51. }
  52. return value;
  53. }
  54. public virtual string GetString(string name, CultureInfo culture)
  55. {
  56. var value = GetStringOrNull(name, culture);
  57. if (value == null)
  58. {
  59. return ReturnGivenNameOrThrowException(name, culture);
  60. }
  61. return value;
  62. }
  63. public string GetStringOrNull(string name, bool tryDefaults = true)
  64. {
  65. //WARN: tryDefaults is not implemented!
  66. return ResourceManager.GetString(name);
  67. }
  68. public string GetStringOrNull(string name, CultureInfo culture, bool tryDefaults = true)
  69. {
  70. //WARN: tryDefaults is not implemented!
  71. return ResourceManager.GetString(name, culture);
  72. }
  73. /// <summary>
  74. /// Gets all strings in current language.
  75. /// </summary>
  76. public virtual IReadOnlyList<LocalizedString> GetAllStrings(bool includeDefaults = true)
  77. {
  78. return GetAllStrings(CultureInfo.CurrentUICulture, includeDefaults);
  79. }
  80. /// <summary>
  81. /// Gets all strings in specified culture.
  82. /// </summary>
  83. public virtual IReadOnlyList<LocalizedString> GetAllStrings(CultureInfo culture, bool includeDefaults = true)
  84. {
  85. return ResourceManager
  86. .GetResourceSet(culture, true, includeDefaults)
  87. .Cast<DictionaryEntry>()
  88. .Select(entry => new LocalizedString(entry.Key.ToString(), entry.Value.ToString(), culture))
  89. .ToImmutableList();
  90. }
  91. protected virtual string ReturnGivenNameOrThrowException(string name, CultureInfo culture)
  92. {
  93. return LocalizationSourceHelper.ReturnGivenNameOrThrowException(
  94. _configuration,
  95. Name,
  96. name,
  97. culture,
  98. _logger
  99. );
  100. }
  101. }
  102. }