diff --git a/src/Volo.Abp.Identity.Web/AbpIdentityWebModule.cs b/src/Volo.Abp.Identity.Web/AbpIdentityWebModule.cs index f46a90d262..2a2741b36b 100644 --- a/src/Volo.Abp.Identity.Web/AbpIdentityWebModule.cs +++ b/src/Volo.Abp.Identity.Web/AbpIdentityWebModule.cs @@ -38,7 +38,7 @@ namespace Volo.Abp.Identity.Web { options.FileSets.AddEmbedded("Volo.Abp.Identity.Web"); }); - + services.Configure(options => { options.Resources.AddJson("en"); diff --git a/src/Volo.Abp/Volo/Abp/Localization/AbpStringLocalizerFactory.cs b/src/Volo.Abp/Volo/Abp/Localization/AbpStringLocalizerFactory.cs index 96c45777df..aacd307054 100644 --- a/src/Volo.Abp/Volo/Abp/Localization/AbpStringLocalizerFactory.cs +++ b/src/Volo.Abp/Volo/Abp/Localization/AbpStringLocalizerFactory.cs @@ -43,19 +43,10 @@ namespace Volo.Abp.Localization private AbpDictionaryBasedStringLocalizer CreateAbpStringLocalizer(LocalizationResource resource) { resource.Initialize(_serviceProvider); - - //Wrap reader by wrappers (like db wrapper which implement multitenancy/regions and so on...) - - //Notes: Localizer will be cached, so wrappers are responsible to cache/invalidate themselves! - - var localizer = new AbpDictionaryBasedStringLocalizer( + return new AbpDictionaryBasedStringLocalizer( resource, resource.BaseResourceTypes.Select(Create).ToList() ); - - //TODO: Wrap with DB provider or other premium sources - - return localizer; } public virtual IStringLocalizer Create(string baseName, string location) diff --git a/src/Volo.Abp/Volo/Abp/Localization/ILocalizationDictionaryProvider.cs b/src/Volo.Abp/Volo/Abp/Localization/ILocalizationDictionaryProvider.cs index 6b63386c05..ba2877cb18 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(); + void Initialize(LocalizationResourceInitializationContext context); void Extend(ILocalizationDictionaryProvider dictionaryProvider); } diff --git a/src/Volo.Abp/Volo/Abp/Localization/Json/JsonEmbeddedFileLocalizationDictionaryProvider.cs b/src/Volo.Abp/Volo/Abp/Localization/Json/JsonEmbeddedFileLocalizationDictionaryProvider.cs index b110594018..ee0580d164 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() //TODO: Extract initialization to a factory..? + public override void Initialize(LocalizationResourceInitializationContext context) //TODO: Extract initialization to a factory..? { var rootNameSpaceWithDot = _rootNamespace + "."; diff --git a/src/Volo.Abp/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs b/src/Volo.Abp/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs index ccc1324f5d..a7f11559dc 100644 --- a/src/Volo.Abp/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs +++ b/src/Volo.Abp/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs @@ -26,7 +26,7 @@ namespace Volo.Abp.Localization.Json } catch (Exception ex) { - throw new AbpException("Invalid localization file format! " + filePath, ex); + throw new AbpException("Invalid localization file format: " + filePath, ex); } } diff --git a/src/Volo.Abp/Volo/Abp/Localization/LocalizationDictionaryProviderBase.cs b/src/Volo.Abp/Volo/Abp/Localization/LocalizationDictionaryProviderBase.cs index 75a76f7f50..a4b94b71d2 100644 --- a/src/Volo.Abp/Volo/Abp/Localization/LocalizationDictionaryProviderBase.cs +++ b/src/Volo.Abp/Volo/Abp/Localization/LocalizationDictionaryProviderBase.cs @@ -11,7 +11,7 @@ namespace Volo.Abp.Localization Dictionaries = new Dictionary(); } - public virtual void Initialize() + public virtual void Initialize(LocalizationResourceInitializationContext context) { } diff --git a/src/Volo.Abp/Volo/Abp/Localization/LocalizationResource.cs b/src/Volo.Abp/Volo/Abp/Localization/LocalizationResource.cs index 39fdc86d03..d4f81ef442 100644 --- a/src/Volo.Abp/Volo/Abp/Localization/LocalizationResource.cs +++ b/src/Volo.Abp/Volo/Abp/Localization/LocalizationResource.cs @@ -17,7 +17,10 @@ namespace Volo.Abp.Localization public List BaseResourceTypes { get; } - public LocalizationResource([NotNull] Type resourceType, [NotNull] string defaultCultureName, [NotNull] ILocalizationDictionaryProvider dictionaryProvider) + public LocalizationResource( + [NotNull] Type resourceType, + [NotNull] string defaultCultureName, + [NotNull] ILocalizationDictionaryProvider dictionaryProvider) { Check.NotNull(resourceType, nameof(resourceType)); Check.NotNull(defaultCultureName, nameof(defaultCultureName)); @@ -33,13 +36,15 @@ namespace Volo.Abp.Localization AddBaseResourceTypes(); } - public virtual void Initialize(IServiceProvider serviceProvider) //TODO: Create a LocalizationResourceInitializationContext! + public virtual void Initialize(IServiceProvider serviceProvider) { - DictionaryProvider.Initialize(); + var context = new LocalizationResourceInitializationContext(serviceProvider); + + DictionaryProvider.Initialize(context); foreach (var extension in Extensions) { - extension.Initialize(); + extension.Initialize(context); DictionaryProvider.Extend(extension); } } diff --git a/src/Volo.Abp/Volo/Abp/Localization/LocalizationResourceInitializationContext.cs b/src/Volo.Abp/Volo/Abp/Localization/LocalizationResourceInitializationContext.cs new file mode 100644 index 0000000000..d7b9ff71b1 --- /dev/null +++ b/src/Volo.Abp/Volo/Abp/Localization/LocalizationResourceInitializationContext.cs @@ -0,0 +1,14 @@ +using System; + +namespace Volo.Abp.Localization +{ + public class LocalizationResourceInitializationContext + { + public IServiceProvider ServiceProvider { get; } + + public LocalizationResourceInitializationContext(IServiceProvider serviceProvider) + { + ServiceProvider = serviceProvider; + } + } +} \ No newline at end of file