diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs index 7bcc0b3cd9..5e48b42d0b 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs @@ -17,6 +17,7 @@ using Volo.Abp.Data; using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; using Volo.Abp.Localization; +using Volo.Abp.Localization.Distributed; using Volo.Abp.MultiTenancy; using Volo.Abp.Settings; using Volo.Abp.Timing; @@ -42,6 +43,7 @@ public class AbpApplicationConfigurationAppService : ApplicationService, IAbpApp private readonly ITimezoneProvider _timezoneProvider; private readonly AbpClockOptions _abpClockOptions; private readonly ICachedObjectExtensionsDtoService _cachedObjectExtensionsDtoService; + private readonly IDistributedLocalizationStore _distributedLocalizationStore; private readonly AbpApplicationConfigurationOptions _options; public AbpApplicationConfigurationAppService( @@ -61,7 +63,8 @@ public class AbpApplicationConfigurationAppService : ApplicationService, IAbpApp ITimezoneProvider timezoneProvider, IOptions abpClockOptions, ICachedObjectExtensionsDtoService cachedObjectExtensionsDtoService, - IOptions options) + IOptions options, + IDistributedLocalizationStore distributedLocalizationStore) { _serviceProvider = serviceProvider; _abpAuthorizationPolicyProvider = abpAuthorizationPolicyProvider; @@ -77,6 +80,7 @@ public class AbpApplicationConfigurationAppService : ApplicationService, IAbpApp _timezoneProvider = timezoneProvider; _abpClockOptions = abpClockOptions.Value; _cachedObjectExtensionsDtoService = cachedObjectExtensionsDtoService; + _distributedLocalizationStore = distributedLocalizationStore; _options = options.Value; _localizationOptions = localizationOptions.Value; _multiTenancyOptions = multiTenancyOptions.Value; @@ -227,6 +231,13 @@ public class AbpApplicationConfigurationAppService : ApplicationService, IAbpApp localizationConfig.Values[resource.ResourceName] = dictionary; } + var distributedLocalizationData = await _distributedLocalizationStore.GetAsync(); + + foreach (var resource in distributedLocalizationData.Resources) + { + localizationConfig.Values[resource.ResourceName] = resource.Texts; + } + localizationConfig.CurrentCulture = GetCurrentCultureInfo(); if (_localizationOptions.DefaultResourceType != null) diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Distributed/DistributedLocalizationData.cs b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Distributed/DistributedLocalizationData.cs new file mode 100644 index 0000000000..b8374f7119 --- /dev/null +++ b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Distributed/DistributedLocalizationData.cs @@ -0,0 +1,18 @@ +using System.Collections.Generic; + +namespace Volo.Abp.Localization.Distributed; + +public class DistributedLocalizationData +{ + public List Resources { get; } + + public DistributedLocalizationData() + { + Resources = new(); + } + + public DistributedLocalizationData(List resources) + { + Resources = Check.NotNull(resources, nameof(resources)); + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Distributed/DistributedLocalizationResourceData.cs b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Distributed/DistributedLocalizationResourceData.cs new file mode 100644 index 0000000000..bbb449a380 --- /dev/null +++ b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Distributed/DistributedLocalizationResourceData.cs @@ -0,0 +1,22 @@ +using System.Collections.Generic; + +namespace Volo.Abp.Localization.Distributed; + +public class DistributedLocalizationResourceData +{ + public string ResourceName { get; } + + public Dictionary Texts { get; } + + public DistributedLocalizationResourceData(string resourceName) + { + ResourceName = Check.NotNullOrWhiteSpace(resourceName, nameof(resourceName)); + Texts = new(); + } + + public DistributedLocalizationResourceData(string resourceName, Dictionary texts) + { + ResourceName = Check.NotNullOrWhiteSpace(resourceName, nameof(resourceName)); + Texts = Check.NotNull(texts, nameof(texts)); + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Distributed/IDistributedLocalizationStore.cs b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Distributed/IDistributedLocalizationStore.cs new file mode 100644 index 0000000000..9dbf699838 --- /dev/null +++ b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Distributed/IDistributedLocalizationStore.cs @@ -0,0 +1,10 @@ +using System.Threading.Tasks; + +namespace Volo.Abp.Localization.Distributed; + +public interface IDistributedLocalizationStore +{ + Task SaveAsync(); + + Task GetAsync(); +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Distributed/NUllDistributedLocalizationStore.cs b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Distributed/NUllDistributedLocalizationStore.cs new file mode 100644 index 0000000000..51fae60544 --- /dev/null +++ b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Distributed/NUllDistributedLocalizationStore.cs @@ -0,0 +1,19 @@ +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.Localization.Distributed; + +public class NUllDistributedLocalizationStore : IDistributedLocalizationStore, ISingletonDependency +{ + private readonly DistributedLocalizationData _data = new(); + + public Task SaveAsync() + { + return Task.CompletedTask; + } + + public Task GetAsync() + { + return Task.FromResult(_data); + } +} \ No newline at end of file