mirror of https://github.com/abpframework/abp.git
1 changed files with 87 additions and 0 deletions
@ -0,0 +1,87 @@ |
|||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Threading.Tasks; |
||||
|
using Microsoft.Extensions.Options; |
||||
|
using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations; |
||||
|
using Volo.Abp.DependencyInjection; |
||||
|
using Volo.Abp.Localization; |
||||
|
using Volo.Abp.Localization.External; |
||||
|
|
||||
|
namespace Volo.Abp.AspNetCore.Mvc.Client; |
||||
|
|
||||
|
public class RemoteExternalLocalizationStore : IExternalLocalizationStore, ITransientDependency |
||||
|
{ |
||||
|
protected ICachedApplicationConfigurationClient ConfigurationClient { get; } |
||||
|
protected AbpLocalizationOptions LocalizationOptions { get; } |
||||
|
|
||||
|
public RemoteExternalLocalizationStore( |
||||
|
ICachedApplicationConfigurationClient configurationClient, |
||||
|
IOptions<AbpLocalizationOptions> localizationOptions) |
||||
|
{ |
||||
|
ConfigurationClient = configurationClient; |
||||
|
LocalizationOptions = localizationOptions.Value; |
||||
|
} |
||||
|
|
||||
|
public virtual LocalizationResourceBase GetResourceOrNull(string resourceName) |
||||
|
{ |
||||
|
var configurationDto = ConfigurationClient.Get(); |
||||
|
return CreateLocalizationResourceFromConfigurationOrNull(resourceName, configurationDto); |
||||
|
} |
||||
|
|
||||
|
public virtual async Task<LocalizationResourceBase> GetResourceOrNullAsync(string resourceName) |
||||
|
{ |
||||
|
var configurationDto = await ConfigurationClient.GetAsync(); |
||||
|
return CreateLocalizationResourceFromConfigurationOrNull(resourceName, configurationDto); |
||||
|
} |
||||
|
|
||||
|
public virtual async Task<string[]> GetResourceNamesAsync() |
||||
|
{ |
||||
|
var configurationDto = await ConfigurationClient.GetAsync(); |
||||
|
return configurationDto |
||||
|
.Localization |
||||
|
.Resources |
||||
|
.Keys |
||||
|
.Where(x => !LocalizationOptions.Resources.ContainsKey(x)) |
||||
|
.ToArray(); |
||||
|
; } |
||||
|
|
||||
|
public virtual async Task<LocalizationResourceBase[]> GetResourcesAsync() |
||||
|
{ |
||||
|
var configurationDto = await ConfigurationClient.GetAsync(); |
||||
|
var resources = new List<LocalizationResourceBase>(); |
||||
|
|
||||
|
foreach (var resource in configurationDto.Localization.Resources) |
||||
|
{ |
||||
|
if (LocalizationOptions.Resources.ContainsKey(resource.Key)) |
||||
|
{ |
||||
|
continue; |
||||
|
} |
||||
|
|
||||
|
resources.Add(CreateNonTypedLocalizationResource(resource.Key, resource.Value)); |
||||
|
} |
||||
|
|
||||
|
return resources.ToArray(); |
||||
|
} |
||||
|
|
||||
|
protected virtual LocalizationResourceBase CreateLocalizationResourceFromConfigurationOrNull( |
||||
|
string resourceName, |
||||
|
ApplicationConfigurationDto configurationDto) |
||||
|
{ |
||||
|
var resourceDto = configurationDto.Localization.Resources.GetOrDefault(resourceName); |
||||
|
|
||||
|
if (resourceDto == null) |
||||
|
{ |
||||
|
return null; |
||||
|
} |
||||
|
|
||||
|
return CreateNonTypedLocalizationResource(resourceName, resourceDto); |
||||
|
} |
||||
|
|
||||
|
protected virtual NonTypedLocalizationResource CreateNonTypedLocalizationResource( |
||||
|
string resourceName, |
||||
|
ApplicationLocalizationResourceDto resourceDto) |
||||
|
{ |
||||
|
return new NonTypedLocalizationResource(resourceName) |
||||
|
.AddBaseResources(resourceDto.BaseResources); |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue