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
);
}
}
}