diff --git a/src/Volo.Abp/Volo/Abp/Localization/AbpStringLocalizerFactory.cs b/src/Volo.Abp/Volo/Abp/Localization/AbpStringLocalizerFactory.cs index 2d838e3b19..64e617929d 100644 --- a/src/Volo.Abp/Volo/Abp/Localization/AbpStringLocalizerFactory.cs +++ b/src/Volo.Abp/Volo/Abp/Localization/AbpStringLocalizerFactory.cs @@ -51,7 +51,7 @@ namespace Volo.Abp.Localization //Notes: Localizer will be cached, so wrappers are responsible to cache/invalidate themselves! - var localizer = new AbpDictionaryBasedStringLocalizer(resource); //TODO: !!! + var localizer = new AbpDictionaryBasedStringLocalizer(resource); //TODO: Wrap with DB provider or other premium sources diff --git a/src/Volo.Abp/Volo/Abp/Localization/ILocalizationDictionaryProvider.cs b/src/Volo.Abp/Volo/Abp/Localization/ILocalizationDictionaryProvider.cs index 1da13bcafb..8a133825db 100644 --- a/src/Volo.Abp/Volo/Abp/Localization/ILocalizationDictionaryProvider.cs +++ b/src/Volo.Abp/Volo/Abp/Localization/ILocalizationDictionaryProvider.cs @@ -6,7 +6,7 @@ namespace Volo.Abp.Localization { IDictionary Dictionaries { get; } - void Initialize(LocalizationResource resource); + void Initialize(); void Extend(ILocalizationDictionary dictionary); } diff --git a/src/Volo.Abp/Volo/Abp/Localization/Json/JsonEmbeddedFileLocalizationDictionaryProvider.cs b/src/Volo.Abp/Volo/Abp/Localization/Json/JsonEmbeddedFileLocalizationDictionaryProvider.cs index d374fda2cf..2a4cb2758f 100644 --- a/src/Volo.Abp/Volo/Abp/Localization/Json/JsonEmbeddedFileLocalizationDictionaryProvider.cs +++ b/src/Volo.Abp/Volo/Abp/Localization/Json/JsonEmbeddedFileLocalizationDictionaryProvider.cs @@ -17,7 +17,7 @@ namespace Volo.Abp.Localization.Json _rootNamespace = rootNamespace; } - public override void Initialize(LocalizationResource resource) + public override void Initialize() { var resourceNames = _assembly.GetManifestResourceNames(); foreach (var resourceName in resourceNames) @@ -31,7 +31,7 @@ namespace Volo.Abp.Localization.Json var dictionary = CreateJsonLocalizationDictionary(jsonString); if (Dictionaries.ContainsKey(dictionary.CultureName)) { - throw new AbpException(resource.ResourceType.FullName + " source contains more than one dictionary for the culture: " + dictionary.CultureName); + throw new AbpException($"{resourceName} dictionary has a culture name '{dictionary.CultureName}' which is already defined!"); } Dictionaries[dictionary.CultureName] = dictionary; @@ -40,9 +40,9 @@ namespace Volo.Abp.Localization.Json } } - protected virtual JsonLocalizationDictionary CreateJsonLocalizationDictionary(string jsonString) + protected virtual ILocalizationDictionary CreateJsonLocalizationDictionary(string jsonString) { - return JsonLocalizationDictionary.BuildFromJsonString(jsonString); + return JsonLocalizationDictionaryBuilder.BuildFromJsonString(jsonString); } } } \ No newline at end of file diff --git a/src/Volo.Abp/Volo/Abp/Localization/Json/JsonLocalizationDictionary.cs b/src/Volo.Abp/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs similarity index 74% rename from src/Volo.Abp/Volo/Abp/Localization/Json/JsonLocalizationDictionary.cs rename to src/Volo.Abp/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs index 7a13c5eb05..ccc1324f5d 100644 --- a/src/Volo.Abp/Volo/Abp/Localization/Json/JsonLocalizationDictionary.cs +++ b/src/Volo.Abp/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Globalization; using System.IO; using Newtonsoft.Json; using Newtonsoft.Json.Serialization; @@ -13,22 +12,13 @@ namespace Volo.Abp.Localization.Json /// /// Use static Build methods to create instance of this class. /// - public class JsonLocalizationDictionary : LocalizationDictionary + public class JsonLocalizationDictionaryBuilder { /// - /// Private constructor. - /// - /// Culture of the dictionary - private JsonLocalizationDictionary(string cultureName) - : base(cultureName) - { - } - - /// - /// Builds an from given file. + /// Builds an from given file. /// /// Path of the file - public static JsonLocalizationDictionary BuildFromFile(string filePath) + public static ILocalizationDictionary BuildFromFile(string filePath) { try { @@ -41,10 +31,10 @@ namespace Volo.Abp.Localization.Json } /// - /// Builds an from given json string. + /// Builds an from given json string. /// /// Json string - public static JsonLocalizationDictionary BuildFromJsonString(string jsonString) + public static ILocalizationDictionary BuildFromJsonString(string jsonString) { JsonLocalizationFile jsonFile; try @@ -67,7 +57,7 @@ namespace Volo.Abp.Localization.Json throw new AbpException("Culture is empty in language json file."); } - var dictionary = new JsonLocalizationDictionary(cultureCode); + var dictionary = new LocalizationDictionary(cultureCode); var dublicateNames = new List(); foreach (var item in jsonFile.Texts) { @@ -76,7 +66,7 @@ namespace Volo.Abp.Localization.Json throw new AbpException("The key is empty in given json string."); } - if (dictionary.Contains(item.Key)) + if (dictionary.GetOrNull(item.Key) != null) { dublicateNames.Add(item.Key); } diff --git a/src/Volo.Abp/Volo/Abp/Localization/LocalizationDictionary.cs b/src/Volo.Abp/Volo/Abp/Localization/LocalizationDictionary.cs index 7bb7217549..700633ce22 100644 --- a/src/Volo.Abp/Volo/Abp/Localization/LocalizationDictionary.cs +++ b/src/Volo.Abp/Volo/Abp/Localization/LocalizationDictionary.cs @@ -1,7 +1,6 @@ using System.Collections; using System.Collections.Generic; using System.Collections.Immutable; -using System.Globalization; namespace Volo.Abp.Localization { @@ -11,17 +10,13 @@ namespace Volo.Abp.Localization public class LocalizationDictionary : ILocalizationDictionary, IEnumerable { /// - public string CultureName { get; private set; } + public string CultureName { get; } /// public virtual LocalString this[string name] { - get - { - var localizedString = GetOrNull(name); - return localizedString == null ? null : localizedString; - } - set { _dictionary[name] = value; } + get => GetOrNull(name); + set => _dictionary[name] = value; } private readonly Dictionary _dictionary; @@ -39,8 +34,7 @@ namespace Volo.Abp.Localization /// public virtual LocalString GetOrNull(string name) { - LocalString localizedString; - return _dictionary.TryGetValue(name, out localizedString) ? localizedString : null; + return _dictionary.GetOrDefault(name); } /// diff --git a/src/Volo.Abp/Volo/Abp/Localization/LocalizationDictionaryProviderBase.cs b/src/Volo.Abp/Volo/Abp/Localization/LocalizationDictionaryProviderBase.cs index 21dd462f28..622d946226 100644 --- a/src/Volo.Abp/Volo/Abp/Localization/LocalizationDictionaryProviderBase.cs +++ b/src/Volo.Abp/Volo/Abp/Localization/LocalizationDictionaryProviderBase.cs @@ -4,20 +4,17 @@ namespace Volo.Abp.Localization { public abstract class LocalizationDictionaryProviderBase : ILocalizationDictionaryProvider { - public LocalizationResource ResourceType { get; private set; } - public ILocalizationDictionary DefaultDictionary { get; protected set; } - public IDictionary Dictionaries { get; private set; } + public IDictionary Dictionaries { get; } protected LocalizationDictionaryProviderBase() { Dictionaries = new Dictionary(); } - public virtual void Initialize(LocalizationResource resourceType) + public virtual void Initialize() { - ResourceType = resourceType; } public void Extend(ILocalizationDictionary dictionary) diff --git a/src/Volo.Abp/Volo/Abp/Localization/LocalizationResource.cs b/src/Volo.Abp/Volo/Abp/Localization/LocalizationResource.cs index 38e6120bb1..dd44c67166 100644 --- a/src/Volo.Abp/Volo/Abp/Localization/LocalizationResource.cs +++ b/src/Volo.Abp/Volo/Abp/Localization/LocalizationResource.cs @@ -33,7 +33,7 @@ namespace Volo.Abp.Localization public virtual void Initialize(IServiceProvider serviceProvider) //TODO: Create a LocalizationResourceInitializationContext! { - DictionaryProvider.Initialize(this); + DictionaryProvider.Initialize(); } } } \ No newline at end of file