diff --git a/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/TextAppService.cs b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/TextAppService.cs index 066551876..4a74681d8 100644 --- a/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/TextAppService.cs +++ b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/TextAppService.cs @@ -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 { @@ -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 localizationOptions) { _localizerFactory = stringLocalizerFactory; + _externalLocalizationStore = externalLocalizationStore; _localizationOptions = localizationOptions.Value; } public async virtual Task 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 @@ public async virtual Task> 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) { diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application/LINGYUN/Abp/LocalizationManagement/ResourceAppService.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application/LINGYUN/Abp/LocalizationManagement/ResourceAppService.cs index ee88668a7..d2af84bd3 100644 --- a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application/LINGYUN/Abp/LocalizationManagement/ResourceAppService.cs +++ b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application/LINGYUN/Abp/LocalizationManagement/ResourceAppService.cs @@ -25,7 +25,7 @@ public async virtual Task GetByNameAsync(string name) [Authorize(LocalizationManagementPermissions.Resource.Create)] public async virtual Task 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);