Skip to content

Commit

Permalink
Merge pull request #847 from colinin/fix-dynamic-localization
Browse files Browse the repository at this point in the history
fix(localization): querying the list of languages requires loading dynamic resources.
  • Loading branch information
colinin authored Jul 12, 2023
2 parents 10b1dae + 245af68 commit c7c0b90
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
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
{
Expand All @@ -16,19 +17,20 @@ public class TextAppService : ApplicationService, ITextAppService
{
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))
{
Expand All @@ -51,21 +53,24 @@ public async virtual Task<ListResultDto<TextDifferenceDto>> GetListAsync(GetText
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)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public async virtual Task<ResourceDto> GetByNameAsync(string name)
[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);
Expand Down

0 comments on commit c7c0b90

Please sign in to comment.