Browse Source

fix(localization): querying the list of languages requires loading dynamic resources.

pull/847/head
colin 2 years ago
parent
commit
245af68d7e
  1. 23
      aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/TextAppService.cs
  2. 2
      aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application/LINGYUN/Abp/LocalizationManagement/ResourceAppService.cs

23
aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/TextAppService.cs

@ -8,6 +8,7 @@ using System.Threading.Tasks;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services; using Volo.Abp.Application.Services;
using Volo.Abp.Localization; using Volo.Abp.Localization;
using Volo.Abp.Localization.External;
namespace LINGYUN.Abp.AspNetCore.Mvc.Localization namespace LINGYUN.Abp.AspNetCore.Mvc.Localization
{ {
@ -16,19 +17,20 @@ namespace LINGYUN.Abp.AspNetCore.Mvc.Localization
{ {
private readonly AbpLocalizationOptions _localizationOptions; private readonly AbpLocalizationOptions _localizationOptions;
private readonly IStringLocalizerFactory _localizerFactory; private readonly IStringLocalizerFactory _localizerFactory;
private readonly IExternalLocalizationStore _externalLocalizationStore;
public TextAppService( public TextAppService(
IStringLocalizerFactory stringLocalizerFactory, IStringLocalizerFactory stringLocalizerFactory,
IExternalLocalizationStore externalLocalizationStore,
IOptions<AbpLocalizationOptions> localizationOptions) IOptions<AbpLocalizationOptions> localizationOptions)
{ {
_localizerFactory = stringLocalizerFactory; _localizerFactory = stringLocalizerFactory;
_externalLocalizationStore = externalLocalizationStore;
_localizationOptions = localizationOptions.Value; _localizationOptions = localizationOptions.Value;
} }
public async virtual Task<TextDto> GetByCultureKeyAsync(GetTextByKeyInput input) public async virtual Task<TextDto> GetByCultureKeyAsync(GetTextByKeyInput input)
{ {
var resource = _localizationOptions.Resources.GetOrDefault(input.ResourceName); var localizer = await _localizerFactory.CreateByResourceNameAsync(input.ResourceName);
var localizer = await _localizerFactory.CreateByResourceNameAsync(resource.ResourceName);
using (CultureHelper.Use(input.CultureName, input.CultureName)) using (CultureHelper.Use(input.CultureName, input.CultureName))
{ {
@ -51,21 +53,24 @@ namespace LINGYUN.Abp.AspNetCore.Mvc.Localization
if (input.ResourceName.IsNullOrWhiteSpace()) if (input.ResourceName.IsNullOrWhiteSpace())
{ {
var filterResources = _localizationOptions.Resources var filterResources = _localizationOptions.Resources
.WhereIf(!input.Filter.IsNullOrWhiteSpace(), x => x.Value.ResourceName.Contains(input.Filter)) .Select(r => r.Value)
.OrderBy(r => r.Value.ResourceName); .Union(await _externalLocalizationStore.GetResourcesAsync())
.WhereIf(!input.Filter.IsNullOrWhiteSpace(), x => x.ResourceName.Contains(input.Filter))
.OrderBy(r => r.ResourceName);
foreach (var resource in filterResources) foreach (var resource in filterResources)
{ {
result.AddRange( result.AddRange(
await GetTextDifferences(resource.Value, input.CultureName, input.TargetCultureName, input.Filter, input.OnlyNull)); await GetTextDifferences(resource, input.CultureName, input.TargetCultureName, input.Filter, input.OnlyNull));
} }
} }
else else
{ {
var resource = _localizationOptions.Resources var resource = _localizationOptions.Resources
.Where(l => l.Value.ResourceName.Equals(input.ResourceName)) .Select(r => r.Value)
.WhereIf(!input.Filter.IsNullOrWhiteSpace(), x => x.Value.ResourceName.Contains(input.Filter)) .Union(await _externalLocalizationStore.GetResourcesAsync())
.Select(l => l.Value) .Where(l => l.ResourceName.Equals(input.ResourceName))
.WhereIf(!input.Filter.IsNullOrWhiteSpace(), x => x.ResourceName.Contains(input.Filter))
.FirstOrDefault(); .FirstOrDefault();
if (resource != null) if (resource != null)
{ {

2
aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application/LINGYUN/Abp/LocalizationManagement/ResourceAppService.cs

@ -25,7 +25,7 @@ public class ResourceAppService : LocalizationAppServiceBase, IResourceAppServic
[Authorize(LocalizationManagementPermissions.Resource.Create)] [Authorize(LocalizationManagementPermissions.Resource.Create)]
public async virtual Task<ResourceDto> CreateAsync(ResourceCreateDto input) public async virtual Task<ResourceDto> CreateAsync(ResourceCreateDto input)
{ {
if (_repository.FindByNameAsync(input.Name) != null) if (await _repository.FindByNameAsync(input.Name) != null)
{ {
throw new BusinessException(LocalizationErrorCodes.Resource.NameAlreadyExists) throw new BusinessException(LocalizationErrorCodes.Resource.NameAlreadyExists)
.WithData(nameof(Resource.Name), input.Name); .WithData(nameof(Resource.Name), input.Name);

Loading…
Cancel
Save