using System.Collections.Generic; using System.Globalization; using System.Resources; using Abp.Configuration.Startup; using Abp.Dependency; using Castle.Core.Logging; using System.Collections; using System.Collections.Immutable; using System.Linq; namespace Abp.Localization.Sources.Resource { /// /// This class is used to simplify to create a localization source that /// uses resource a file. /// public class ResourceFileLocalizationSource : ILocalizationSource, ISingletonDependency { /// /// Unique Name of the source. /// public string Name { get; } /// /// Reference to the object related to this localization source. /// public ResourceManager ResourceManager { get; } private ILogger _logger; private ILocalizationConfiguration _configuration; /// Unique Name of the source /// Reference to the object related to this localization source public ResourceFileLocalizationSource(string name, ResourceManager resourceManager) { Name = name; ResourceManager = resourceManager; } /// /// This method is called by ABP before first usage. /// public virtual void Initialize(ILocalizationConfiguration configuration, IIocResolver iocResolver) { _configuration = configuration; _logger = iocResolver.IsRegistered(typeof(ILoggerFactory)) ? iocResolver.Resolve().Create(typeof(ResourceFileLocalizationSource)) : NullLogger.Instance; } public virtual string GetString(string name) { var value = GetStringOrNull(name); if (value == null) { return ReturnGivenNameOrThrowException(name, CultureInfo.CurrentUICulture); } return value; } public virtual string GetString(string name, CultureInfo culture) { var value = GetStringOrNull(name, culture); if (value == null) { return ReturnGivenNameOrThrowException(name, culture); } return value; } public string GetStringOrNull(string name, bool tryDefaults = true) { //WARN: tryDefaults is not implemented! return ResourceManager.GetString(name); } public string GetStringOrNull(string name, CultureInfo culture, bool tryDefaults = true) { //WARN: tryDefaults is not implemented! return ResourceManager.GetString(name, culture); } /// /// Gets all strings in current language. /// public virtual IReadOnlyList GetAllStrings(bool includeDefaults = true) { return GetAllStrings(CultureInfo.CurrentUICulture, includeDefaults); } /// /// Gets all strings in specified culture. /// public virtual IReadOnlyList GetAllStrings(CultureInfo culture, bool includeDefaults = true) { return ResourceManager .GetResourceSet(culture, true, includeDefaults) .Cast() .Select(entry => new LocalizedString(entry.Key.ToString(), entry.Value.ToString(), culture)) .ToImmutableList(); } protected virtual string ReturnGivenNameOrThrowException(string name, CultureInfo culture) { return LocalizationSourceHelper.ReturnGivenNameOrThrowException( _configuration, Name, name, culture, _logger ); } } }