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.Services;
using Volo.Abp.Localization;
using Volo.Abp.Localization.External;
namespace LINGYUN.Abp.AspNetCore.Mvc.Localization
{
@ -16,19 +17,20 @@ namespace LINGYUN.Abp.AspNetCore.Mvc.Localization
{
private readonly AbpLocalizationOptions _localizationOptions;
private readonly IStringLocalizerFactory _localizerFactory;
private readonly IExternalLocalizationStore _externalLocalizationStore;
public TextAppService(
IStringLocalizerFactory stringLocalizerFactory,
IExternalLocalizationStore externalLocalizationStore,
IOptions<AbpLocalizationOptions> localizationOptions)
{
_localizerFactory = stringLocalizerFactory;
_externalLocalizationStore = externalLocalizationStore;
_localizationOptions = localizationOptions.Value;
}
public async virtual Task<TextDto> GetByCultureKeyAsync(GetTextByKeyInput input)
{
var resource = _localizationOptions.Resources.GetOrDefault(input.ResourceName);
var localizer = await _localizerFactory.CreateByResourceNameAsync(resource.ResourceName);
var localizer = await _localizerFactory.CreateByResourceNameAsync(input.ResourceName);
using (CultureHelper.Use(input.CultureName, input.CultureName))
{
@ -51,21 +53,24 @@ namespace LINGYUN.Abp.AspNetCore.Mvc.Localization
if (input.ResourceName.IsNullOrWhiteSpace())
{
var filterResources = _localizationOptions.Resources
.WhereIf(!input.Filter.IsNullOrWhiteSpace(), x => x.Value.ResourceName.Contains(input.Filter))
.OrderBy(r => r.Value.ResourceName);
.Select(r => r.Value)
.Union(await _externalLocalizationStore.GetResourcesAsync())
.WhereIf(!input.Filter.IsNullOrWhiteSpace(), x => x.ResourceName.Contains(input.Filter))
.OrderBy(r => r.ResourceName);
foreach (var resource in filterResources)
{
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
{
var resource = _localizationOptions.Resources
.Where(l => l.Value.ResourceName.Equals(input.ResourceName))
.WhereIf(!input.Filter.IsNullOrWhiteSpace(), x => x.Value.ResourceName.Contains(input.Filter))
.Select(l => l.Value)
.Select(r => r.Value)
.Union(await _externalLocalizationStore.GetResourcesAsync())
.Where(l => l.ResourceName.Equals(input.ResourceName))
.WhereIf(!input.Filter.IsNullOrWhiteSpace(), x => x.ResourceName.Contains(input.Filter))
.FirstOrDefault();
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)]
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)
.WithData(nameof(Resource.Name), input.Name);

Loading…
Cancel
Save