| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- using System;
- using System.Collections.Generic;
- using System.Collections.Immutable;
- using System.Linq;
- using Abp.Configuration.Startup;
- using Abp.Dependency;
- using Abp.Localization.Dictionaries;
- using Abp.Localization.Sources;
- using Castle.Core.Logging;
- namespace Abp.Localization
- {
- internal class LocalizationManager : ILocalizationManager
- {
- public ILogger Logger { get; set; }
- private readonly ILanguageManager _languageManager;
- private readonly ILocalizationConfiguration _configuration;
- private readonly IIocResolver _iocResolver;
- private readonly IDictionary<string, ILocalizationSource> _sources;
- /// <summary>
- /// Constructor.
- /// </summary>
- public LocalizationManager(
- ILanguageManager languageManager,
- ILocalizationConfiguration configuration,
- IIocResolver iocResolver)
- {
- Logger = NullLogger.Instance;
- _languageManager = languageManager;
- _configuration = configuration;
- _iocResolver = iocResolver;
- _sources = new Dictionary<string, ILocalizationSource>();
- }
- public void Initialize()
- {
- InitializeSources();
- }
- private void InitializeSources()
- {
- if (!_configuration.IsEnabled)
- {
- Logger.Debug("Localization disabled.");
- return;
- }
- Logger.Debug(string.Format("Initializing {0} localization sources.", _configuration.Sources.Count));
- foreach (var source in _configuration.Sources)
- {
- if (_sources.ContainsKey(source.Name))
- {
- throw new AbpException("There are more than one source with name: " + source.Name + "! Source name must be unique!");
- }
- _sources[source.Name] = source;
- source.Initialize(_configuration, _iocResolver);
- //Extending dictionaries
- if (source is IDictionaryBasedLocalizationSource)
- {
- var dictionaryBasedSource = source as IDictionaryBasedLocalizationSource;
- var extensions = _configuration.Sources.Extensions.Where(e => e.SourceName == source.Name).ToList();
- foreach (var extension in extensions)
- {
- extension.DictionaryProvider.Initialize(source.Name);
- foreach (var extensionDictionary in extension.DictionaryProvider.Dictionaries.Values)
- {
- dictionaryBasedSource.Extend(extensionDictionary);
- }
- }
- }
- Logger.Debug("Initialized localization source: " + source.Name);
- }
- }
- /// <summary>
- /// Gets a localization source with name.
- /// </summary>
- /// <param name="name">Unique name of the localization source</param>
- /// <returns>The localization source</returns>
- public ILocalizationSource GetSource(string name)
- {
- if (!_configuration.IsEnabled)
- {
- return NullLocalizationSource.Instance;
- }
- if (name == null)
- {
- throw new ArgumentNullException("name");
- }
- ILocalizationSource source;
- if (!_sources.TryGetValue(name, out source))
- {
- throw new AbpException("Can not find a source with name: " + name);
- }
- return source;
- }
- /// <summary>
- /// Gets all registered localization sources.
- /// </summary>
- /// <returns>List of sources</returns>
- public IReadOnlyList<ILocalizationSource> GetAllSources()
- {
- return _sources.Values.ToImmutableList();
- }
- }
- }
|