From a7d1568cc93b8d7bc04c07ab0a8b410c5a814ac4 Mon Sep 17 00:00:00 2001 From: cKey <35512826+colinin@users.noreply.github.com> Date: Tue, 5 Jul 2022 15:26:13 +0800 Subject: [PATCH 1/3] feat: standard interface to access global localized text resources --- aspnet-core/LINGYUN.MicroService.All.sln | 7 + .../FodyWeavers.xml | 3 + .../FodyWeavers.xsd | 30 ++++ ...YUN.Abp.AspNetCore.Mvc.Localization.csproj | 23 +++ .../AbpAspNetCoreMvcLocalizationModule.cs | 43 ++++++ .../Mvc/Localization/GetTextByKeyInput.cs | 17 +++ .../Mvc/Localization/GetTextsInput.cs | 19 +++ .../Mvc/Localization/ILanguageAppService.cs | 11 ++ .../Mvc/Localization/IResourceAppService.cs | 11 ++ .../Mvc/Localization/ITextAppService.cs | 13 ++ .../Mvc/Localization/LanguageAppService.cs | 33 ++++ .../Mvc/Localization/LanguageController.cs | 27 ++++ .../Mvc/Localization}/LanguageDto.cs | 8 +- .../Mvc/Localization/ResourceAppService.cs | 34 +++++ .../Mvc/Localization/ResourceController.cs | 27 ++++ .../Mvc/Localization/ResourceDto.cs | 9 ++ .../Mvc/Localization/Resources/en.json | 21 +++ .../Mvc/Localization/Resources/zh-Hans.json | 21 +++ .../Mvc/Localization/TextAppService.cs | 143 ++++++++++++++++++ .../Mvc/Localization/TextController.cs | 34 +++++ .../Mvc/Localization}/TextDifferenceDto.cs | 6 +- .../AspNetCore/Mvc/Localization}/TextDto.cs | 6 +- .../CreateOrUpdateLanguageInput.cs | 25 --- .../CreateOrUpdateResourceInput.cs | 20 --- .../CreateOrUpdateTextInput.cs | 10 -- .../LocalizationManagement/CreateTextInput.cs | 20 --- .../GetLanguagesInput.cs | 9 -- .../GetResourcesInput.cs | 9 -- .../LocalizationManagement/GetTextsInput.cs | 24 --- .../ILanguageAppService.cs | 19 --- .../IResourceAppService.cs | 18 --- .../LocalizationManagement/ITextAppService.cs | 13 +- .../Abp/LocalizationManagement/ResourceDto.cs | 13 -- .../RestoreDefaultTextInput.cs | 19 +++ .../{GetTextByKeyInput.cs => SetTextInput.cs} | 13 +- .../LocalizationManagement/UpdateTextInput.cs | 6 - .../LanguageAppService.cs | 73 --------- .../LocalizationAppServiceBase.cs | 13 ++ ...ationManagementApplicationMapperProfile.cs | 6 +- .../ResourceAppService.cs | 78 ---------- .../LocalizationManagement/TextAppService.cs | 98 +++++------- .../Localization/Resources/en.json | 24 +-- .../Localization/Resources/zh-Hans.json | 24 +-- .../LocalizationManagement/ITextRepository.cs | 25 +-- .../LocalizationStore.cs | 2 +- .../EfCoreTextRepository.cs | 44 +++--- ....Abp.LocalizationManagement.HttpApi.csproj | 5 +- .../AbpLocalizationManagementHttpApiModule.cs | 9 +- .../LanguageController.cs | 62 -------- .../ResourceController.cs | 62 -------- .../LocalizationManagement/TextController.cs | 40 +---- .../BackendAdminHttpApiHostModule.cs | 2 + ...roService.BackendAdmin.HttpApi.Host.csproj | 1 + ...onManagementHttpApiHostModule.Configure.cs | 5 + ...ice.PlatformManagement.HttpApi.Host.csproj | 1 + .../PlatformManagementHttpApiHostModule.cs | 2 + ...ervice.RealtimeMessage.HttpApi.Host.csproj | 1 + .../RealtimeMessageHttpApiHostModule.cs | 2 + ...Service.TaskManagement.HttpApi.Host.csproj | 2 + ...skManagementHttpApiHostModule.Configure.cs | 13 ++ .../TaskManagementHttpApiHostModule.cs | 4 + ...ice.WebhooksManagement.HttpApi.Host.csproj | 1 + .../WebhooksManagementHttpApiHostModule.cs | 2 + ...ice.WorkflowManagement.HttpApi.Host.csproj | 2 + ...owManagementHttpApiHostModule.Configure.cs | 13 ++ .../WorkflowManagementHttpApiHostModule.cs | 6 +- .../IdentityServerHttpApiHostModule.cs | 2 + ...Service.identityServer.HttpApi.Host.csproj | 1 + 68 files changed, 712 insertions(+), 677 deletions(-) create mode 100644 aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/FodyWeavers.xml create mode 100644 aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/FodyWeavers.xsd create mode 100644 aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN.Abp.AspNetCore.Mvc.Localization.csproj create mode 100644 aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/AbpAspNetCoreMvcLocalizationModule.cs create mode 100644 aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/GetTextByKeyInput.cs create mode 100644 aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/GetTextsInput.cs create mode 100644 aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/ILanguageAppService.cs create mode 100644 aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/IResourceAppService.cs create mode 100644 aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/ITextAppService.cs create mode 100644 aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/LanguageAppService.cs create mode 100644 aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/LanguageController.cs rename aspnet-core/modules/{lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement => localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization}/LanguageDto.cs (52%) create mode 100644 aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/ResourceAppService.cs create mode 100644 aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/ResourceController.cs create mode 100644 aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/ResourceDto.cs create mode 100644 aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/Resources/en.json create mode 100644 aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/Resources/zh-Hans.json create mode 100644 aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/TextAppService.cs create mode 100644 aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/TextController.cs rename aspnet-core/modules/{lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement => localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization}/TextDifferenceDto.cs (68%) rename aspnet-core/modules/{lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement => localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization}/TextDto.cs (61%) delete mode 100644 aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/CreateOrUpdateLanguageInput.cs delete mode 100644 aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/CreateOrUpdateResourceInput.cs delete mode 100644 aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/CreateOrUpdateTextInput.cs delete mode 100644 aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/CreateTextInput.cs delete mode 100644 aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/GetLanguagesInput.cs delete mode 100644 aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/GetResourcesInput.cs delete mode 100644 aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/GetTextsInput.cs delete mode 100644 aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/ILanguageAppService.cs delete mode 100644 aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/IResourceAppService.cs delete mode 100644 aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/ResourceDto.cs create mode 100644 aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/RestoreDefaultTextInput.cs rename aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/{GetTextByKeyInput.cs => SetTextInput.cs} (79%) delete mode 100644 aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/UpdateTextInput.cs delete mode 100644 aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application/LINGYUN/Abp/LocalizationManagement/LanguageAppService.cs create mode 100644 aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application/LINGYUN/Abp/LocalizationManagement/LocalizationAppServiceBase.cs delete mode 100644 aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application/LINGYUN/Abp/LocalizationManagement/ResourceAppService.cs delete mode 100644 aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.HttpApi/LINGYUN/Abp/LocalizationManagement/LanguageController.cs delete mode 100644 aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.HttpApi/LINGYUN/Abp/LocalizationManagement/ResourceController.cs diff --git a/aspnet-core/LINGYUN.MicroService.All.sln b/aspnet-core/LINGYUN.MicroService.All.sln index 886b2f755..d95121a18 100644 --- a/aspnet-core/LINGYUN.MicroService.All.sln +++ b/aspnet-core/LINGYUN.MicroService.All.sln @@ -426,6 +426,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TextTemplating. EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Common", "modules\common\LINGYUN.Abp.Notifications.Common\LINGYUN.Abp.Notifications.Common.csproj", "{0CE035CF-2D8A-4559-93EC-ADBEC4237C61}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.AspNetCore.Mvc.Localization", "modules\localization\LINGYUN.Abp.AspNetCore.Mvc.Localization\LINGYUN.Abp.AspNetCore.Mvc.Localization.csproj", "{995DB1CE-A2FC-4468-A521-4207FD587EC5}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -1104,6 +1106,10 @@ Global {0CE035CF-2D8A-4559-93EC-ADBEC4237C61}.Debug|Any CPU.Build.0 = Debug|Any CPU {0CE035CF-2D8A-4559-93EC-ADBEC4237C61}.Release|Any CPU.ActiveCfg = Release|Any CPU {0CE035CF-2D8A-4559-93EC-ADBEC4237C61}.Release|Any CPU.Build.0 = Release|Any CPU + {995DB1CE-A2FC-4468-A521-4207FD587EC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {995DB1CE-A2FC-4468-A521-4207FD587EC5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {995DB1CE-A2FC-4468-A521-4207FD587EC5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {995DB1CE-A2FC-4468-A521-4207FD587EC5}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1312,6 +1318,7 @@ Global {130F8ED1-A64F-48DE-BF43-18EAD19CAF63} = {ABD89F39-62D9-439E-8662-BE4F36BFA04F} {A53FE09E-6B1C-46C0-9422-C313D14AE9E4} = {ABD89F39-62D9-439E-8662-BE4F36BFA04F} {0CE035CF-2D8A-4559-93EC-ADBEC4237C61} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E} + {995DB1CE-A2FC-4468-A521-4207FD587EC5} = {90E88EAC-4291-4406-8D88-EFDF61B11292} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {C95FDF91-16F2-4A8B-A4BE-0E62D1B66718} diff --git a/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/FodyWeavers.xml b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/FodyWeavers.xml new file mode 100644 index 000000000..17d32672d --- /dev/null +++ b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/FodyWeavers.xsd b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/FodyWeavers.xsd new file mode 100644 index 000000000..11da52550 --- /dev/null +++ b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN.Abp.AspNetCore.Mvc.Localization.csproj b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN.Abp.AspNetCore.Mvc.Localization.csproj new file mode 100644 index 000000000..b253f4cec --- /dev/null +++ b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN.Abp.AspNetCore.Mvc.Localization.csproj @@ -0,0 +1,23 @@ + + + + + + + net6.0 + + + + + + + + + + + + + + + + diff --git a/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/AbpAspNetCoreMvcLocalizationModule.cs b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/AbpAspNetCoreMvcLocalizationModule.cs new file mode 100644 index 000000000..29acb159f --- /dev/null +++ b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/AbpAspNetCoreMvcLocalizationModule.cs @@ -0,0 +1,43 @@ +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc.Localization; +using Volo.Abp.Localization; +using Volo.Abp.Localization.Resources.AbpLocalization; +using Volo.Abp.Modularity; +using Volo.Abp.VirtualFileSystem; + +namespace LINGYUN.Abp.AspNetCore.Mvc.Localization; + +[DependsOn(typeof(AbpAspNetCoreMvcModule))] +public class AbpAspNetCoreMvcLocalizationModule : AbpModule +{ + public override void PreConfigureServices(ServiceConfigurationContext context) + { + PreConfigure(options => + { + options.AddAssemblyResource( + typeof(AbpLocalizationResource), + typeof(AbpAspNetCoreMvcLocalizationModule).Assembly); + }); + + PreConfigure(mvcBuilder => + { + mvcBuilder.AddApplicationPartIfNotExists(typeof(AbpAspNetCoreMvcLocalizationModule).Assembly); + }); + } + + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options.FileSets.AddEmbedded(); + }); + + Configure(options => + { + options.Resources + .Get() + .AddVirtualJson("/LINGYUN/Abp/AspNetCore/Mvc/Localization/Resources"); + }); + } +} \ No newline at end of file diff --git a/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/GetTextByKeyInput.cs b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/GetTextByKeyInput.cs new file mode 100644 index 000000000..0029e1567 --- /dev/null +++ b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/GetTextByKeyInput.cs @@ -0,0 +1,17 @@ +using System.ComponentModel.DataAnnotations; +using Volo.Abp.Validation; + +namespace LINGYUN.Abp.AspNetCore.Mvc.Localization +{ + public class GetTextByKeyInput + { + [Required] + public string Key { get; set; } + + [Required] + public string CultureName { get; set; } + + [Required] + public string ResourceName { get; set; } + } +} diff --git a/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/GetTextsInput.cs b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/GetTextsInput.cs new file mode 100644 index 000000000..87e0c3711 --- /dev/null +++ b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/GetTextsInput.cs @@ -0,0 +1,19 @@ +using System.ComponentModel.DataAnnotations; + +namespace LINGYUN.Abp.AspNetCore.Mvc.Localization +{ + public class GetTextsInput + { + [Required] + public string CultureName { get; set; } + + [Required] + public string TargetCultureName { get; set; } + + public string ResourceName { get; set; } + + public bool? OnlyNull { get; set; } + + public string Filter { get; set; } + } +} diff --git a/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/ILanguageAppService.cs b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/ILanguageAppService.cs new file mode 100644 index 000000000..e120cc3ac --- /dev/null +++ b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/ILanguageAppService.cs @@ -0,0 +1,11 @@ +using System.Threading.Tasks; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; + +namespace LINGYUN.Abp.AspNetCore.Mvc.Localization +{ + public interface ILanguageAppService : IApplicationService + { + Task> GetListAsync(); + } +} diff --git a/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/IResourceAppService.cs b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/IResourceAppService.cs new file mode 100644 index 000000000..bcfc40d46 --- /dev/null +++ b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/IResourceAppService.cs @@ -0,0 +1,11 @@ +using System.Threading.Tasks; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; + +namespace LINGYUN.Abp.AspNetCore.Mvc.Localization +{ + public interface IResourceAppService : IApplicationService + { + Task> GetListAsync(); + } +} diff --git a/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/ITextAppService.cs b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/ITextAppService.cs new file mode 100644 index 000000000..2526952f6 --- /dev/null +++ b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/ITextAppService.cs @@ -0,0 +1,13 @@ +using System.Threading.Tasks; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; + +namespace LINGYUN.Abp.AspNetCore.Mvc.Localization +{ + public interface ITextAppService : IApplicationService + { + Task GetByCultureKeyAsync(GetTextByKeyInput input); + + Task> GetListAsync(GetTextsInput input); + } +} diff --git a/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/LanguageAppService.cs b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/LanguageAppService.cs new file mode 100644 index 000000000..77b191e10 --- /dev/null +++ b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/LanguageAppService.cs @@ -0,0 +1,33 @@ +using Microsoft.AspNetCore.Authorization; +using System.Linq; +using System.Threading.Tasks; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; +using Volo.Abp.Localization; + +namespace LINGYUN.Abp.AspNetCore.Mvc.Localization +{ + [Authorize] + public class LanguageAppService : ApplicationService, ILanguageAppService + { + private readonly ILanguageProvider _languageProvider; + public LanguageAppService(ILanguageProvider languageProvider) + { + _languageProvider = languageProvider; + } + + public virtual async Task> GetListAsync() + { + var languages = await _languageProvider.GetLanguagesAsync(); + + return new ListResultDto( + languages.Select(l => new LanguageDto + { + CultureName = l.CultureName, + UiCultureName = l.UiCultureName, + DisplayName = l.DisplayName, + FlagIcon = l.FlagIcon + }).ToList()); + } + } +} diff --git a/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/LanguageController.cs b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/LanguageController.cs new file mode 100644 index 000000000..6d02e8577 --- /dev/null +++ b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/LanguageController.cs @@ -0,0 +1,27 @@ +using Microsoft.AspNetCore.Mvc; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.AspNetCore.Mvc; + +namespace LINGYUN.Abp.AspNetCore.Mvc.Localization +{ + [Area("abp")] + [RemoteService(Name = "abp")] + [Route("api/abp/localization/languages")] + public class LanguageController : AbpController, ILanguageAppService + { + private readonly ILanguageAppService _service; + + public LanguageController(ILanguageAppService service) + { + _service = service; + } + + [HttpGet] + public virtual Task> GetListAsync() + { + return _service.GetListAsync(); + } + } +} diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/LanguageDto.cs b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/LanguageDto.cs similarity index 52% rename from aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/LanguageDto.cs rename to aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/LanguageDto.cs index 1afaf3679..e0e38627c 100644 --- a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/LanguageDto.cs +++ b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/LanguageDto.cs @@ -1,11 +1,7 @@ -using System; -using Volo.Abp.Application.Dtos; - -namespace LINGYUN.Abp.LocalizationManagement +namespace LINGYUN.Abp.AspNetCore.Mvc.Localization { - public class LanguageDto : AuditedEntityDto + public class LanguageDto { - public bool Enable { get; set; } public string CultureName { get; set; } public string UiCultureName { get; set; } public string DisplayName { get; set; } diff --git a/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/ResourceAppService.cs b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/ResourceAppService.cs new file mode 100644 index 000000000..fb87bcafa --- /dev/null +++ b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/ResourceAppService.cs @@ -0,0 +1,34 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.Extensions.Options; +using System.Linq; +using System.Threading.Tasks; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; +using Volo.Abp.Localization; + +namespace LINGYUN.Abp.AspNetCore.Mvc.Localization +{ + [Authorize] + public class ResourceAppService : ApplicationService, IResourceAppService + { + private readonly AbpLocalizationOptions _localizationOptions; + + public ResourceAppService( + IOptions localizationOptions) + { + _localizationOptions = localizationOptions.Value; + } + + public virtual Task> GetListAsync() + { + var resources = _localizationOptions.Resources.Select(x => new ResourceDto + { + Name = x.Value.ResourceName, + DisplayName = x.Value.ResourceName, + Description = x.Value.ResourceName, + }); + + return Task.FromResult(new ListResultDto(resources.ToList())); + } + } +} diff --git a/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/ResourceController.cs b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/ResourceController.cs new file mode 100644 index 000000000..d2cada1c3 --- /dev/null +++ b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/ResourceController.cs @@ -0,0 +1,27 @@ +using Microsoft.AspNetCore.Mvc; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.AspNetCore.Mvc; + +namespace LINGYUN.Abp.AspNetCore.Mvc.Localization +{ + [Area("abp")] + [RemoteService(Name = "abp")] + [Route("api/abp/localization/resources")] + public class ResourceController : AbpController, IResourceAppService + { + private readonly IResourceAppService _service; + + public ResourceController(IResourceAppService service) + { + _service = service; + } + + [HttpGet] + public virtual Task> GetListAsync() + { + return _service.GetListAsync(); + } + } +} diff --git a/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/ResourceDto.cs b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/ResourceDto.cs new file mode 100644 index 000000000..d47887849 --- /dev/null +++ b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/ResourceDto.cs @@ -0,0 +1,9 @@ +namespace LINGYUN.Abp.AspNetCore.Mvc.Localization +{ + public class ResourceDto + { + public string Name { get; set; } + public string DisplayName { get; set; } + public string Description { get; set; } + } +} diff --git a/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/Resources/en.json b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/Resources/en.json new file mode 100644 index 000000000..f3e7111d4 --- /dev/null +++ b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/Resources/en.json @@ -0,0 +1,21 @@ +{ + "culture": "en", + "texts": { + "Languages": "Languages", + "Resources": "Resources", + "Texts": "Texts", + "DisplayName:Key": "Key", + "DisplayName:Value": "Value", + "Description:Name": "Name", + "Description:CultureName": "Culture Name", + "Description:ResourceName": "Resource Name", + "Description:TargetCultureName": "Target Culture", + "Description:TargetValue": "Target Value", + "Description:OnlyNull": "Only Null", + "Description:Filter": "Filter", + "Description:UiCultureName": "Ui Culture Name", + "Description:DisplayName": "Display Name", + "Description:FlagIcon": "Flag Icon", + "Description:Description": "Description" + } +} \ No newline at end of file diff --git a/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/Resources/zh-Hans.json b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/Resources/zh-Hans.json new file mode 100644 index 000000000..394983e66 --- /dev/null +++ b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/Resources/zh-Hans.json @@ -0,0 +1,21 @@ +{ + "culture": "zh-Hans", + "texts": { + "Languages": "语言", + "Resources": "资源", + "Texts": "文档", + "DisplayName:Key": "键名", + "DisplayName:Value": "键值", + "Description:Name": "名称", + "Description:CultureName": "文化名称", + "Description:ResourceName": "资源名称", + "Description:TargetCultureName": "目标文化", + "Description:TargetValue": "目标值", + "Description:OnlyNull": "仅限空值", + "Description:Filter": "筛选", + "Description:UiCultureName": "Ui文件名称", + "Description:DisplayName": "显示名称", + "Description:FlagIcon": "旗帜图标", + "Description:Description": "描述" + } +} \ No newline at end of file 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 new file mode 100644 index 000000000..3df08c82e --- /dev/null +++ b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/TextAppService.cs @@ -0,0 +1,143 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.Extensions.Localization; +using Microsoft.Extensions.Options; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; +using Volo.Abp.Localization; + +namespace LINGYUN.Abp.AspNetCore.Mvc.Localization +{ + [Authorize] + public class TextAppService : ApplicationService, ITextAppService + { + private readonly AbpLocalizationOptions _localizationOptions; + private readonly IStringLocalizerFactory _localizerFactory; + public TextAppService( + IStringLocalizerFactory stringLocalizerFactory, + IOptions localizationOptions) + { + _localizerFactory = stringLocalizerFactory; + _localizationOptions = localizationOptions.Value; + } + + public virtual Task GetByCultureKeyAsync(GetTextByKeyInput input) + { + var resource = _localizationOptions.Resources + .Where(l => l.Value.ResourceName.Equals(input.ResourceName)) + .Select(l => l.Value) + .FirstOrDefault(); + + IEnumerable localizedStrings = new List(); + var localizer = _localizerFactory.Create(resource.ResourceType); + + using (CultureHelper.Use(input.CultureName)) + { + localizedStrings = localizer.GetAllStrings(true); + + var result = new TextDto + { + Key = input.Key, + CultureName = input.CultureName, + ResourceName = input.ResourceName, + Value = localizer[input.Key]?.Value + }; + + return Task.FromResult(result); + } + } + + public virtual Task> GetListAsync(GetTextsInput input) + { + var result = new List(); + + if (input.ResourceName.IsNullOrWhiteSpace()) + { + foreach (var resource in _localizationOptions.Resources) + { + result.AddRange(GetTextDifferences(resource.Value, input.CultureName, input.TargetCultureName, input.OnlyNull)); + } + } + else + { + var resource = _localizationOptions.Resources + .Where(l => l.Value.ResourceName.Equals(input.ResourceName)) + .Select(l => l.Value) + .FirstOrDefault(); + if (resource != null) + { + result.AddRange(GetTextDifferences(resource, input.CultureName, input.TargetCultureName, input.OnlyNull)); + } + } + + return Task.FromResult(new ListResultDto(result)); + } + + protected virtual IEnumerable GetTextDifferences( + LocalizationResource resource, + string cultureName, + string targetCultureName, + bool? onlyNull = null) + { + var result = new List(); + + IEnumerable localizedStrings = new List(); + IEnumerable targetLocalizedStrings = new List(); + var localizer = _localizerFactory.Create(resource.ResourceType); + + using (CultureHelper.Use(cultureName)) + { + localizedStrings = localizer.GetAllStrings(true); + } + + if (Equals(cultureName, targetCultureName)) + { + targetLocalizedStrings = localizedStrings; + } + else + { + using (CultureHelper.Use(targetCultureName)) + { + targetLocalizedStrings = localizer.GetAllStrings(true); + } + } + + foreach (var localizedString in localizedStrings) + { + var targetLocalizedString = targetLocalizedStrings.FirstOrDefault(l => l.Name.Equals(localizedString.Name)); + if (onlyNull == true) + { + if (targetLocalizedString == null || targetLocalizedString.Value.IsNullOrWhiteSpace()) + { + result.Add(new TextDifferenceDto + { + CultureName = cultureName, + TargetCultureName = targetCultureName, + Key = localizedString.Name, + Value = localizedString.Value, + TargetValue = null, + ResourceName = resource.ResourceName + }); + } + } + else + { + result.Add(new TextDifferenceDto + { + CultureName = cultureName, + TargetCultureName = targetCultureName, + Key = localizedString.Name, + Value = localizedString.Value, + TargetValue = targetLocalizedString?.Value, + ResourceName = resource.ResourceName + }); + } + } + + return result; + } + } +} diff --git a/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/TextController.cs b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/TextController.cs new file mode 100644 index 000000000..7eda7c0f6 --- /dev/null +++ b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/TextController.cs @@ -0,0 +1,34 @@ +using Microsoft.AspNetCore.Mvc; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.AspNetCore.Mvc; + +namespace LINGYUN.Abp.AspNetCore.Mvc.Localization +{ + [Area("abp")] + [RemoteService(Name = "abp")] + [Route("api/abp/localization/texts")] + public class TextController : AbpController, ITextAppService + { + private readonly ITextAppService _service; + + public TextController(ITextAppService service) + { + _service = service; + } + + [HttpGet] + [Route("by-culture-key")] + public virtual Task GetByCultureKeyAsync(GetTextByKeyInput input) + { + return _service.GetByCultureKeyAsync(input); + } + + [HttpGet] + public virtual Task> GetListAsync(GetTextsInput input) + { + return _service.GetListAsync(input); + } + } +} diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/TextDifferenceDto.cs b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/TextDifferenceDto.cs similarity index 68% rename from aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/TextDifferenceDto.cs rename to aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/TextDifferenceDto.cs index 28a4a5a9b..9675e7581 100644 --- a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/TextDifferenceDto.cs +++ b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/TextDifferenceDto.cs @@ -1,8 +1,6 @@ -using Volo.Abp.Application.Dtos; - -namespace LINGYUN.Abp.LocalizationManagement +namespace LINGYUN.Abp.AspNetCore.Mvc.Localization { - public class TextDifferenceDto : EntityDto + public class TextDifferenceDto { public string CultureName { get; set; } public string Key { get; set; } diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/TextDto.cs b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/TextDto.cs similarity index 61% rename from aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/TextDto.cs rename to aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/TextDto.cs index 44bd7863b..9b4e77322 100644 --- a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/TextDto.cs +++ b/aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/TextDto.cs @@ -1,8 +1,6 @@ -using Volo.Abp.Application.Dtos; - -namespace LINGYUN.Abp.LocalizationManagement +namespace LINGYUN.Abp.AspNetCore.Mvc.Localization { - public class TextDto : EntityDto + public class TextDto { public string Key { get; set; } public string Value { get; set; } diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/CreateOrUpdateLanguageInput.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/CreateOrUpdateLanguageInput.cs deleted file mode 100644 index 131ad2098..000000000 --- a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/CreateOrUpdateLanguageInput.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using Volo.Abp.Validation; - -namespace LINGYUN.Abp.LocalizationManagement -{ - public class CreateOrUpdateLanguageInput - { - public virtual bool Enable { get; set; } - - [Required] - [DynamicStringLength(typeof(LanguageConsts), nameof(LanguageConsts.MaxCultureNameLength))] - public string CultureName { get; set; } - - [Required] - [DynamicStringLength(typeof(LanguageConsts), nameof(LanguageConsts.MaxUiCultureNameLength))] - public string UiCultureName { get; set; } - - [Required] - [DynamicStringLength(typeof(LanguageConsts), nameof(LanguageConsts.MaxDisplayNameLength))] - public string DisplayName { get; set; } - - [DynamicStringLength(typeof(LanguageConsts), nameof(LanguageConsts.MaxFlagIconLength))] - public string FlagIcon { get; set; } - } -} diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/CreateOrUpdateResourceInput.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/CreateOrUpdateResourceInput.cs deleted file mode 100644 index cc2a07ef8..000000000 --- a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/CreateOrUpdateResourceInput.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using Volo.Abp.Validation; - -namespace LINGYUN.Abp.LocalizationManagement -{ - public class CreateOrUpdateResourceInput - { - public bool Enable { get; set; } - - [Required] - [DynamicStringLength(typeof(ResourceConsts), nameof(ResourceConsts.MaxNameLength))] - public string Name { get; set; } - - [DynamicStringLength(typeof(ResourceConsts), nameof(ResourceConsts.MaxDisplayNameLength))] - public string DisplayName { get; set; } - - [DynamicStringLength(typeof(ResourceConsts), nameof(ResourceConsts.MaxDescriptionLength))] - public string Description { get; set; } - } -} diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/CreateOrUpdateTextInput.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/CreateOrUpdateTextInput.cs deleted file mode 100644 index f35d659b3..000000000 --- a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/CreateOrUpdateTextInput.cs +++ /dev/null @@ -1,10 +0,0 @@ -using Volo.Abp.Validation; - -namespace LINGYUN.Abp.LocalizationManagement -{ - public class CreateOrUpdateTextInput - { - [DynamicStringLength(typeof(TextConsts), nameof(TextConsts.MaxValueLength))] - public string Value { get; set; } - } -} diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/CreateTextInput.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/CreateTextInput.cs deleted file mode 100644 index cfa8dcd50..000000000 --- a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/CreateTextInput.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using Volo.Abp.Validation; - -namespace LINGYUN.Abp.LocalizationManagement -{ - public class CreateTextInput : CreateOrUpdateTextInput - { - [Required] - [DynamicStringLength(typeof(ResourceConsts), nameof(ResourceConsts.MaxNameLength))] - public string ResourceName { get; set; } - - [Required] - [DynamicStringLength(typeof(TextConsts), nameof(TextConsts.MaxKeyLength))] - public string Key { get; set; } - - [Required] - [DynamicStringLength(typeof(LanguageConsts), nameof(LanguageConsts.MaxCultureNameLength))] - public string CultureName { get; set; } - } -} diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/GetLanguagesInput.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/GetLanguagesInput.cs deleted file mode 100644 index a74174c47..000000000 --- a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/GetLanguagesInput.cs +++ /dev/null @@ -1,9 +0,0 @@ -using Volo.Abp.Application.Dtos; - -namespace LINGYUN.Abp.LocalizationManagement -{ - public class GetLanguagesInput : PagedAndSortedResultRequestDto - { - public string Filter { get; set; } - } -} diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/GetResourcesInput.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/GetResourcesInput.cs deleted file mode 100644 index d6ec662ac..000000000 --- a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/GetResourcesInput.cs +++ /dev/null @@ -1,9 +0,0 @@ -using Volo.Abp.Application.Dtos; - -namespace LINGYUN.Abp.LocalizationManagement -{ - public class GetResourcesInput : PagedAndSortedResultRequestDto - { - public string Filter { get; set; } - } -} diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/GetTextsInput.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/GetTextsInput.cs deleted file mode 100644 index f6516c1c0..000000000 --- a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/GetTextsInput.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Validation; - -namespace LINGYUN.Abp.LocalizationManagement -{ - public class GetTextsInput : PagedAndSortedResultRequestDto - { - [Required] - [DynamicStringLength(typeof(LanguageConsts), nameof(LanguageConsts.MaxCultureNameLength))] - public string CultureName { get; set; } - - [Required] - [DynamicStringLength(typeof(LanguageConsts), nameof(LanguageConsts.MaxCultureNameLength))] - public string TargetCultureName { get; set; } - - [DynamicStringLength(typeof(ResourceConsts), nameof(ResourceConsts.MaxNameLength))] - public string ResourceName { get; set; } - - public bool? OnlyNull { get; set; } - - public string Filter { get; set; } - } -} diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/ILanguageAppService.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/ILanguageAppService.cs deleted file mode 100644 index 6b037d4cf..000000000 --- a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/ILanguageAppService.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Threading.Tasks; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Application.Services; - -namespace LINGYUN.Abp.LocalizationManagement -{ - public interface ILanguageAppService : - ICrudAppService< - LanguageDto, - Guid, - GetLanguagesInput, - CreateOrUpdateLanguageInput, - CreateOrUpdateLanguageInput - > - { - Task> GetAllAsync(); - } -} diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/IResourceAppService.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/IResourceAppService.cs deleted file mode 100644 index b8756ccbc..000000000 --- a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/IResourceAppService.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using System.Threading.Tasks; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Application.Services; - -namespace LINGYUN.Abp.LocalizationManagement -{ - public interface IResourceAppService : - ICrudAppService< - ResourceDto, - Guid, - GetResourcesInput, - CreateOrUpdateResourceInput, - CreateOrUpdateResourceInput> - { - Task> GetAllAsync(); - } -} diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/ITextAppService.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/ITextAppService.cs index 5a002da47..cf788ae11 100644 --- a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/ITextAppService.cs +++ b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/ITextAppService.cs @@ -3,15 +3,10 @@ using Volo.Abp.Application.Services; namespace LINGYUN.Abp.LocalizationManagement { - public interface ITextAppService : - ICrudAppService< - TextDto, - TextDifferenceDto, - int, - GetTextsInput, - CreateTextInput, - UpdateTextInput> + public interface ITextAppService : IApplicationService { - Task GetByCultureKeyAsync(GetTextByKeyInput input); + Task SetTextAsync(SetTextInput input); + + Task RestoreToDefaultAsync(RestoreDefaultTextInput input); } } diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/ResourceDto.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/ResourceDto.cs deleted file mode 100644 index b6f986621..000000000 --- a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/ResourceDto.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; -using Volo.Abp.Application.Dtos; - -namespace LINGYUN.Abp.LocalizationManagement -{ - public class ResourceDto : AuditedEntityDto - { - public bool Enable { get; set; } - public string Name { get; set; } - public string DisplayName { get; set; } - public string Description { get; set; } - } -} diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/RestoreDefaultTextInput.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/RestoreDefaultTextInput.cs new file mode 100644 index 000000000..7eb68931b --- /dev/null +++ b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/RestoreDefaultTextInput.cs @@ -0,0 +1,19 @@ +using System.ComponentModel.DataAnnotations; +using Volo.Abp.Validation; + +namespace LINGYUN.Abp.LocalizationManagement; + +public class RestoreDefaultTextInput +{ + [Required] + [DynamicStringLength(typeof(ResourceConsts), nameof(ResourceConsts.MaxNameLength))] + public string ResourceName { get; set; } + + [Required] + [DynamicStringLength(typeof(TextConsts), nameof(TextConsts.MaxKeyLength))] + public string Key { get; set; } + + [Required] + [DynamicStringLength(typeof(LanguageConsts), nameof(LanguageConsts.MaxCultureNameLength))] + public string CultureName { get; set; } +} diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/GetTextByKeyInput.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/SetTextInput.cs similarity index 79% rename from aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/GetTextByKeyInput.cs rename to aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/SetTextInput.cs index f1ff271de..411a774ea 100644 --- a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/GetTextByKeyInput.cs +++ b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/SetTextInput.cs @@ -1,10 +1,14 @@ -using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations; using Volo.Abp.Validation; namespace LINGYUN.Abp.LocalizationManagement { - public class GetTextByKeyInput + public class SetTextInput { + [Required] + [DynamicStringLength(typeof(ResourceConsts), nameof(ResourceConsts.MaxNameLength))] + public string ResourceName { get; set; } + [Required] [DynamicStringLength(typeof(TextConsts), nameof(TextConsts.MaxKeyLength))] public string Key { get; set; } @@ -13,8 +17,7 @@ namespace LINGYUN.Abp.LocalizationManagement [DynamicStringLength(typeof(LanguageConsts), nameof(LanguageConsts.MaxCultureNameLength))] public string CultureName { get; set; } - [Required] - [DynamicStringLength(typeof(ResourceConsts), nameof(ResourceConsts.MaxNameLength))] - public string ResourceName { get; set; } + [DynamicStringLength(typeof(TextConsts), nameof(TextConsts.MaxValueLength))] + public string Value { get; set; } } } diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/UpdateTextInput.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/UpdateTextInput.cs deleted file mode 100644 index f448b0079..000000000 --- a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application.Contracts/LINGYUN/Abp/LocalizationManagement/UpdateTextInput.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace LINGYUN.Abp.LocalizationManagement -{ - public class UpdateTextInput : CreateOrUpdateTextInput - { - } -} diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application/LINGYUN/Abp/LocalizationManagement/LanguageAppService.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application/LINGYUN/Abp/LocalizationManagement/LanguageAppService.cs deleted file mode 100644 index c97ae46d7..000000000 --- a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application/LINGYUN/Abp/LocalizationManagement/LanguageAppService.cs +++ /dev/null @@ -1,73 +0,0 @@ -using LINGYUN.Abp.LocalizationManagement.Permissions; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Application.Services; - -namespace LINGYUN.Abp.LocalizationManagement -{ - public class LanguageAppService : - CrudAppService< - Language, - LanguageDto, - Guid, - GetLanguagesInput, - CreateOrUpdateLanguageInput, - CreateOrUpdateLanguageInput>, - ILanguageAppService - { - public LanguageAppService(ILanguageRepository repository) : base(repository) - { - GetPolicyName = LocalizationManagementPermissions.Language.Default; - GetListPolicyName = LocalizationManagementPermissions.Language.Default; - CreatePolicyName = LocalizationManagementPermissions.Language.Create; - UpdatePolicyName = LocalizationManagementPermissions.Language.Update; - DeletePolicyName = LocalizationManagementPermissions.Language.Delete; - } - - public virtual async Task> GetAllAsync() - { - await CheckGetListPolicyAsync(); - - var languages = await Repository.GetListAsync(); - - return new ListResultDto( - ObjectMapper.Map, List>(languages)); - } - - protected override Language MapToEntity(CreateOrUpdateLanguageInput createInput) - { - return new Language( - createInput.CultureName, - createInput.UiCultureName, - createInput.DisplayName, - createInput.FlagIcon) - { - Enable = createInput.Enable - }; - } - - protected override void MapToEntity(CreateOrUpdateLanguageInput updateInput, Language entity) - { - if (!string.Equals(entity.FlagIcon, updateInput.FlagIcon, StringComparison.InvariantCultureIgnoreCase)) - { - entity.FlagIcon = updateInput.FlagIcon; - } - entity.ChangeCulture(updateInput.CultureName, updateInput.UiCultureName, updateInput.DisplayName); - entity.Enable = updateInput.Enable; - } - - protected override async Task> CreateFilteredQueryAsync(GetLanguagesInput input) - { - var query = await base.CreateFilteredQueryAsync(input); - - query = query.WhereIf(!input.Filter.IsNullOrWhiteSpace(), - x => x.CultureName.Contains(input.Filter) || x.UiCultureName.Contains(input.Filter) || - x.DisplayName.Contains(input.Filter)); - - return query; - } - } -} diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application/LINGYUN/Abp/LocalizationManagement/LocalizationAppServiceBase.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application/LINGYUN/Abp/LocalizationManagement/LocalizationAppServiceBase.cs new file mode 100644 index 000000000..16973c2a9 --- /dev/null +++ b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application/LINGYUN/Abp/LocalizationManagement/LocalizationAppServiceBase.cs @@ -0,0 +1,13 @@ +using LINGYUN.Abp.LocalizationManagement.Localization; +using Volo.Abp.Application.Services; + +namespace LINGYUN.Abp.LocalizationManagement; + +public abstract class LocalizationAppServiceBase : ApplicationService +{ + protected LocalizationAppServiceBase() + { + LocalizationResource = typeof(LocalizationManagementResource); + ObjectMapperContext = typeof(AbpLocalizationManagementApplicationModule); + } +} diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application/LINGYUN/Abp/LocalizationManagement/LocalizationManagementApplicationMapperProfile.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application/LINGYUN/Abp/LocalizationManagement/LocalizationManagementApplicationMapperProfile.cs index 5b8a4b1f9..6a85076fe 100644 --- a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application/LINGYUN/Abp/LocalizationManagement/LocalizationManagementApplicationMapperProfile.cs +++ b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application/LINGYUN/Abp/LocalizationManagement/LocalizationManagementApplicationMapperProfile.cs @@ -1,15 +1,11 @@ using AutoMapper; - + namespace LINGYUN.Abp.LocalizationManagement { public class LocalizationManagementApplicationMapperProfile : Profile { public LocalizationManagementApplicationMapperProfile() { - CreateMap(); - CreateMap(); - CreateMap(); - CreateMap(); } } } 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 deleted file mode 100644 index 6affc5c1e..000000000 --- a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application/LINGYUN/Abp/LocalizationManagement/ResourceAppService.cs +++ /dev/null @@ -1,78 +0,0 @@ -using LINGYUN.Abp.LocalizationManagement.Permissions; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Application.Services; - -namespace LINGYUN.Abp.LocalizationManagement -{ - public class ResourceAppService : - CrudAppService< - Resource, - ResourceDto, - Guid, - GetResourcesInput, - CreateOrUpdateResourceInput, - CreateOrUpdateResourceInput>, - IResourceAppService - { - public ResourceAppService(IResourceRepository repository) : base(repository) - { - GetPolicyName = LocalizationManagementPermissions.Resource.Default; - GetListPolicyName = LocalizationManagementPermissions.Resource.Default; - CreatePolicyName = LocalizationManagementPermissions.Resource.Create; - UpdatePolicyName = LocalizationManagementPermissions.Resource.Update; - DeletePolicyName = LocalizationManagementPermissions.Resource.Delete; - } - - public virtual async Task> GetAllAsync() - { - await CheckGetListPolicyAsync(); - - var resources = await Repository.GetListAsync(); - - return new ListResultDto( - ObjectMapper.Map, List>(resources)); - } - - protected override Resource MapToEntity(CreateOrUpdateResourceInput createInput) - { - return new Resource( - createInput.Name, - createInput.DisplayName, - createInput.Description) - { - Enable = createInput.Enable - }; - } - - protected override void MapToEntity(CreateOrUpdateResourceInput updateInput, Resource entity) - { - if (!string.Equals(entity.Name, updateInput.Name, StringComparison.InvariantCultureIgnoreCase)) - { - entity.Name = updateInput.Name; - } - if (!string.Equals(entity.DisplayName, updateInput.DisplayName, StringComparison.InvariantCultureIgnoreCase)) - { - entity.DisplayName = updateInput.DisplayName; - } - if (!string.Equals(entity.Description, updateInput.Description, StringComparison.InvariantCultureIgnoreCase)) - { - entity.Description = updateInput.Description; - } - entity.Enable = updateInput.Enable; - } - - protected override async Task> CreateFilteredQueryAsync(GetResourcesInput input) - { - var query = await base.CreateFilteredQueryAsync(input); - - query = query.WhereIf(!input.Filter.IsNullOrWhiteSpace(), - x => x.Name.Contains(input.Filter) || x.DisplayName.Contains(input.Filter)); - - return query; - } - } -} diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application/LINGYUN/Abp/LocalizationManagement/TextAppService.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application/LINGYUN/Abp/LocalizationManagement/TextAppService.cs index 0759be05a..eb69435d6 100644 --- a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application/LINGYUN/Abp/LocalizationManagement/TextAppService.cs +++ b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Application/LINGYUN/Abp/LocalizationManagement/TextAppService.cs @@ -1,73 +1,55 @@ using LINGYUN.Abp.LocalizationManagement.Permissions; -using System.Collections.Generic; +using Microsoft.AspNetCore.Authorization; using System.Threading.Tasks; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Application.Services; - + namespace LINGYUN.Abp.LocalizationManagement { - public class TextAppService : - CrudAppService< - Text, - TextDto, - TextDifferenceDto, - int, - GetTextsInput, - CreateTextInput, - UpdateTextInput>, - ITextAppService + [Authorize(LocalizationManagementPermissions.Text.Default)] + public class TextAppService : LocalizationAppServiceBase, ITextAppService { private readonly ITextRepository _textRepository; - public TextAppService(ITextRepository repository) : base(repository) + public TextAppService(ITextRepository repository) { _textRepository = repository; - - GetPolicyName = LocalizationManagementPermissions.Text.Default; - GetListPolicyName = LocalizationManagementPermissions.Text.Default; - CreatePolicyName = LocalizationManagementPermissions.Text.Create; - UpdatePolicyName = LocalizationManagementPermissions.Text.Update; - DeletePolicyName = LocalizationManagementPermissions.Text.Delete; } - public virtual async Task GetByCultureKeyAsync(GetTextByKeyInput input) - { - await CheckGetPolicyAsync(); - - var text = await _textRepository.GetByCultureKeyAsync( - input.ResourceName, input.CultureName, input.Key); - - return await MapToGetOutputDtoAsync(text); + public async virtual Task SetTextAsync(SetTextInput input) + { + var text = await _textRepository.GetByCultureKeyAsync(input.ResourceName, input.CultureName, input.Key); + if (text == null) + { + await AuthorizationService.CheckAsync(LocalizationManagementPermissions.Text.Create); + + text = new Text( + input.ResourceName, + input.CultureName, + input.Key, + input.Value); + + await _textRepository.InsertAsync(text); + } + else + { + await AuthorizationService.CheckAsync(LocalizationManagementPermissions.Text.Update); + + text.SetValue(input.Value); + + await _textRepository.UpdateAsync(text); + } + + await CurrentUnitOfWork.SaveChangesAsync(); } - public override async Task> GetListAsync(GetTextsInput input) - { - await CheckGetListPolicyAsync(); - - var count = await _textRepository.GetDifferenceCountAsync( - input.CultureName, input.TargetCultureName, - input.ResourceName, input.OnlyNull, input.Filter); - - var texts = await _textRepository.GetDifferencePagedListAsync( - input.CultureName, input.TargetCultureName, - input.ResourceName, input.OnlyNull, input.Filter, - input.Sorting, input.SkipCount, input.MaxResultCount); - - return new PagedResultDto(count, - ObjectMapper.Map, List>(texts)); - } - - protected override Text MapToEntity(CreateTextInput createInput) - { - return new Text( - createInput.ResourceName, - createInput.CultureName, - createInput.Key, - createInput.Value); - } - - protected override void MapToEntity(UpdateTextInput updateInput, Text entity) - { - entity.SetValue(updateInput.Value); + [Authorize(LocalizationManagementPermissions.Text.Delete)] + public async virtual Task RestoreToDefaultAsync(RestoreDefaultTextInput input) + { + var text = await _textRepository.GetByCultureKeyAsync(input.ResourceName, input.CultureName, input.Key); + if (text != null) + { + await _textRepository.DeleteAsync(text); + + await CurrentUnitOfWork.SaveChangesAsync(); + } } } } diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Domain.Shared/LINGYUN/Abp/LocalizationManagement/Localization/Resources/en.json b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Domain.Shared/LINGYUN/Abp/LocalizationManagement/Localization/Resources/en.json index abf0296f0..b4c4d6ef8 100644 --- a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Domain.Shared/LINGYUN/Abp/LocalizationManagement/Localization/Resources/en.json +++ b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Domain.Shared/LINGYUN/Abp/LocalizationManagement/Localization/Resources/en.json @@ -1,28 +1,11 @@ { "culture": "en", "texts": { - "Languages": "Languages", - "Resources": "Resources", - "Texts": "Texts", - "Delete": "Delete", "DisplayName:Any": "Any", "DisplayName:CreationTime": "Creation Time", - "DisplayName:CultureName": "Culture", - "DisplayName:Description": "Description", - "DisplayName:DisplayName": "Display Name", - "DisplayName:Enable": "Enable", - "DisplayName:FlagIcon": "Flag Icon", - "DisplayName:Key": "Key", "DisplayName:LastModificationTime": "Modification Time", - "DisplayName:Name": "Name", - "DisplayName:OnlyNull": "Only Null", - "DisplayName:ResourceName": "Resource", "DisplayName:SaveAndNext": "Save & Next", - "DisplayName:TargetCultureName": "Target Culture", - "DisplayName:TargetValue": "Target Value", - "DisplayName:UiCultureName": "Ui Culture", - "DisplayName:Value": "Value", "Permissions:LocalizationManagement": "Localization", "Permissions:Language": "Language", "Permissions:Resource": "Resource", @@ -33,13 +16,8 @@ "Edit": "Edit", "EditByName": "Edit - {0}", "Filter": "Filter", - "Language:AddNew": "Add New Language", - "Resource:AddNew": "Add New Resource", "SaveAndNext": "Save & Next", "SearchFilter": "Search", - "Text:AddNew": "Add New Text", - "WillDeleteLanguage": "Language to be deleted {0}", - "WillDeleteResource": "Resource to be deleted {0}", - "WillDeleteText": "Document to be deleted {0}" + "Text:AddNew": "Add New Text" } } \ No newline at end of file diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Domain.Shared/LINGYUN/Abp/LocalizationManagement/Localization/Resources/zh-Hans.json b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Domain.Shared/LINGYUN/Abp/LocalizationManagement/Localization/Resources/zh-Hans.json index 8bfb0cb98..03c3846ee 100644 --- a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Domain.Shared/LINGYUN/Abp/LocalizationManagement/Localization/Resources/zh-Hans.json +++ b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Domain.Shared/LINGYUN/Abp/LocalizationManagement/Localization/Resources/zh-Hans.json @@ -1,28 +1,11 @@ { "culture": "zh-Hans", "texts": { - "Languages": "语言", - "Resources": "资源", - "Texts": "文档", - "Delete": "删除", "DisplayName:Any": "所有", "DisplayName:CreationTime": "创建时间", - "DisplayName:CultureName": "文化名称", - "DisplayName:Description": "描述", - "DisplayName:DisplayName": "显示名称", - "DisplayName:Enable": "启用", - "DisplayName:FlagIcon": "旗帜图标", - "DisplayName:Key": "键", "DisplayName:LastModificationTime": "变更时间", - "DisplayName:Name": "名称", - "DisplayName:OnlyNull": "仅空值", - "DisplayName:ResourceName": "资源名称", "DisplayName:SaveAndNext": "保存并下一步", - "DisplayName:TargetCultureName": "目标文化", - "DisplayName:TargetValue": "目标值", - "DisplayName:UiCultureName": "界面文化", - "DisplayName:Value": "值", "Permissions:LocalizationManagement": "本地化管理", "Permissions:Language": "语言管理", "Permissions:Resource": "资源管理", @@ -33,13 +16,8 @@ "Edit": "编辑", "EditByName": "编辑 - {0}", "Filter": "过滤字符", - "Language:AddNew": "添加新语言", - "Resource:AddNew": "添加新资源", "SaveAndNext": "保存并下一步", "SearchFilter": "请输入过滤字符", - "Text:AddNew": "添加新文档", - "WillDeleteLanguage": "将要删除语言 {0}", - "WillDeleteResource": "将要删除资源 {0}", - "WillDeleteText": "将要删除文档 {0}" + "Text:AddNew": "添加新文档" } } \ No newline at end of file diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/ITextRepository.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/ITextRepository.cs index e8ca1fd97..64613f44b 100644 --- a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/ITextRepository.cs +++ b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/ITextRepository.cs @@ -16,30 +16,7 @@ namespace LINGYUN.Abp.LocalizationManagement Task> GetListAsync( string resourceName = null, - CancellationToken cancellationToken = default); - - Task> GetListAsync( - string resourceName, - string cultureName, - CancellationToken cancellationToken = default); - - Task GetDifferenceCountAsync( - string cultureName, - string targetCultureName, - string resourceName = null, - bool? onlyNull = null, - string filter = null, - CancellationToken cancellationToken = default); - - Task> GetDifferencePagedListAsync( - string cultureName, - string targetCultureName, - string resourceName = null, - bool? onlyNull = null, - string filter = null, - string sorting = nameof(Text.Key), - int skipCount = 1, - int maxResultCount = 10, + string cultureName = null, CancellationToken cancellationToken = default); } } diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/LocalizationStore.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/LocalizationStore.cs index 8f7e0dce6..874dad3ea 100644 --- a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/LocalizationStore.cs +++ b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/LocalizationStore.cs @@ -54,7 +54,7 @@ namespace LINGYUN.Abp.LocalizationManagement return dictionaries; } - var texts = await TextRepository.GetListAsync(resourceName, cancellationToken); + var texts = await TextRepository.GetListAsync(resourceName, null, cancellationToken); foreach (var textGroup in texts.GroupBy(x => x.CultureName)) { diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore/LINGYUN/Abp/LocalizationManagement/EntityFrameworkCore/EfCoreTextRepository.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore/LINGYUN/Abp/LocalizationManagement/EntityFrameworkCore/EfCoreTextRepository.cs index 3e98be8bc..638de25cc 100644 --- a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore/LINGYUN/Abp/LocalizationManagement/EntityFrameworkCore/EfCoreTextRepository.cs +++ b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore/LINGYUN/Abp/LocalizationManagement/EntityFrameworkCore/EfCoreTextRepository.cs @@ -48,36 +48,32 @@ namespace LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore } public virtual async Task> GetListAsync( - string resourceName = null, + string resourceName = null, + string cultureName = null, CancellationToken cancellationToken = default) { - var languages = (await GetDbContextAsync()).Set(); - var resources = (IQueryable)(await GetDbContextAsync()).Set(); - if (!resourceName.IsNullOrWhiteSpace()) - { - resources = resources.Where(x => x.Name.Equals(resourceName)); - } + //var languages = (await GetDbContextAsync()).Set(); + //var resources = (IQueryable)(await GetDbContextAsync()).Set(); + //if (!resourceName.IsNullOrWhiteSpace()) + //{ + // resources = resources.Where(x => x.Name.Equals(resourceName)); + //} - var texts = await GetDbSetAsync(); + //var texts = await GetDbSetAsync(); - return await (from txts in texts - join r in resources - on txts.ResourceName equals r.Name - join lg in languages - on txts.CultureName equals lg.CultureName - where r.Enable && lg.Enable - select txts) - .ToListAsync(GetCancellationToken(cancellationToken)); - } + //return await (from txts in texts + // join r in resources + // on txts.ResourceName equals r.Name + // join lg in languages + // on txts.CultureName equals lg.CultureName + // where r.Enable && lg.Enable + // select txts) + // .ToListAsync(GetCancellationToken(cancellationToken)); - public virtual async Task> GetListAsync( - string resourceName, - string cultureName, - CancellationToken cancellationToken = default) - { return await (await GetDbSetAsync()) - .Where(x => x.ResourceName.Equals(resourceName) && x.CultureName.Equals(cultureName)) - .ToListAsync(GetCancellationToken(cancellationToken)); + .WhereIf(!resourceName.IsNullOrWhiteSpace(), x => x.ResourceName.Equals(resourceName)) + .WhereIf(!cultureName.IsNullOrWhiteSpace(), x => x.CultureName.Equals(cultureName)) + .ToListAsync(GetCancellationToken(cancellationToken)); } public virtual async Task> GetDifferencePagedListAsync( diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.HttpApi/LINGYUN.Abp.LocalizationManagement.HttpApi.csproj b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.HttpApi/LINGYUN.Abp.LocalizationManagement.HttpApi.csproj index 30dbe15f8..2c5a6ee68 100644 --- a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.HttpApi/LINGYUN.Abp.LocalizationManagement.HttpApi.csproj +++ b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.HttpApi/LINGYUN.Abp.LocalizationManagement.HttpApi.csproj @@ -9,10 +9,7 @@ - - - - + diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.HttpApi/LINGYUN/Abp/LocalizationManagement/AbpLocalizationManagementHttpApiModule.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.HttpApi/LINGYUN/Abp/LocalizationManagement/AbpLocalizationManagementHttpApiModule.cs index d5e37ab0e..db11979bb 100644 --- a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.HttpApi/LINGYUN/Abp/LocalizationManagement/AbpLocalizationManagementHttpApiModule.cs +++ b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.HttpApi/LINGYUN/Abp/LocalizationManagement/AbpLocalizationManagementHttpApiModule.cs @@ -1,15 +1,16 @@ -using LINGYUN.Abp.LocalizationManagement.Localization; +using LINGYUN.Abp.AspNetCore.Mvc.Localization; +using LINGYUN.Abp.LocalizationManagement.Localization; using Microsoft.Extensions.DependencyInjection; -using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc.Localization; using Volo.Abp.Localization; +using Volo.Abp.Localization.Resources.AbpLocalization; using Volo.Abp.Modularity; using Volo.Abp.Validation.Localization; namespace LINGYUN.Abp.LocalizationManagement { [DependsOn( - typeof(AbpAspNetCoreMvcModule), + typeof(AbpAspNetCoreMvcLocalizationModule), typeof(AbpLocalizationManagementApplicationContractsModule))] public class AbpLocalizationManagementHttpApiModule : AbpModule { @@ -35,7 +36,7 @@ namespace LINGYUN.Abp.LocalizationManagement { options.Resources .Get() - .AddBaseTypes(typeof(AbpValidationResource)); + .AddBaseTypes(typeof(AbpValidationResource), typeof(AbpLocalizationResource)); }); } } diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.HttpApi/LINGYUN/Abp/LocalizationManagement/LanguageController.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.HttpApi/LINGYUN/Abp/LocalizationManagement/LanguageController.cs deleted file mode 100644 index 54f491257..000000000 --- a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.HttpApi/LINGYUN/Abp/LocalizationManagement/LanguageController.cs +++ /dev/null @@ -1,62 +0,0 @@ -using Microsoft.AspNetCore.Mvc; -using System; -using System.Threading.Tasks; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.AspNetCore.Mvc; - -namespace LINGYUN.Abp.LocalizationManagement -{ - [RemoteService(Name = LocalizationRemoteServiceConsts.RemoteServiceName)] - [Area("localization")] - [Route("api/localization/languages")] - public class LanguageController : AbpController, ILanguageAppService - { - private readonly ILanguageAppService _service; - - public LanguageController(ILanguageAppService service) - { - _service = service; - } - - [HttpPost] - public virtual async Task CreateAsync(CreateOrUpdateLanguageInput input) - { - return await _service.CreateAsync(input); - } - - [HttpDelete] - [Route("{id}")] - public virtual async Task DeleteAsync(Guid id) - { - await _service.DeleteAsync(id); - } - - [HttpGet] - [Route("all")] - public virtual async Task> GetAllAsync() - { - return await _service.GetAllAsync(); - } - - [HttpGet] - [Route("{id}")] - public virtual async Task GetAsync(Guid id) - { - return await _service.GetAsync(id); - } - - [HttpGet] - public virtual async Task> GetListAsync(GetLanguagesInput input) - { - return await _service.GetListAsync(input); - } - - [HttpPut] - [Route("{id}")] - public virtual async Task UpdateAsync(Guid id, CreateOrUpdateLanguageInput input) - { - return await _service.UpdateAsync(id, input); - } - } -} diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.HttpApi/LINGYUN/Abp/LocalizationManagement/ResourceController.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.HttpApi/LINGYUN/Abp/LocalizationManagement/ResourceController.cs deleted file mode 100644 index 36e837472..000000000 --- a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.HttpApi/LINGYUN/Abp/LocalizationManagement/ResourceController.cs +++ /dev/null @@ -1,62 +0,0 @@ -using Microsoft.AspNetCore.Mvc; -using System; -using System.Threading.Tasks; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.AspNetCore.Mvc; - -namespace LINGYUN.Abp.LocalizationManagement -{ - [RemoteService(Name = LocalizationRemoteServiceConsts.RemoteServiceName)] - [Area("localization")] - [Route("api/localization/resources")] - public class ResourceController : AbpController, IResourceAppService - { - private readonly IResourceAppService _service; - - public ResourceController(IResourceAppService service) - { - _service = service; - } - - [HttpPost] - public virtual async Task CreateAsync(CreateOrUpdateResourceInput input) - { - return await _service.CreateAsync(input); - } - - [HttpDelete] - [Route("{id}")] - public virtual async Task DeleteAsync(Guid id) - { - await _service.DeleteAsync(id); - } - - [HttpGet] - [Route("all")] - public virtual async Task> GetAllAsync() - { - return await _service.GetAllAsync(); - } - - [HttpGet] - [Route("{id}")] - public virtual async Task GetAsync(Guid id) - { - return await _service.GetAsync(id); - } - - [HttpGet] - public virtual async Task> GetListAsync(GetResourcesInput input) - { - return await _service.GetListAsync(input); - } - - [HttpPut] - [Route("{id}")] - public virtual async Task UpdateAsync(Guid id, CreateOrUpdateResourceInput input) - { - return await _service.UpdateAsync(id, input); - } - } -} diff --git a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.HttpApi/LINGYUN/Abp/LocalizationManagement/TextController.cs b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.HttpApi/LINGYUN/Abp/LocalizationManagement/TextController.cs index 18b7d2b8f..2008abc32 100644 --- a/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.HttpApi/LINGYUN/Abp/LocalizationManagement/TextController.cs +++ b/aspnet-core/modules/lt/LINGYUN.Abp.LocalizationManagement.HttpApi/LINGYUN/Abp/LocalizationManagement/TextController.cs @@ -1,7 +1,6 @@ using Microsoft.AspNetCore.Mvc; using System.Threading.Tasks; using Volo.Abp; -using Volo.Abp.Application.Dtos; using Volo.Abp.AspNetCore.Mvc; namespace LINGYUN.Abp.LocalizationManagement @@ -18,44 +17,17 @@ namespace LINGYUN.Abp.LocalizationManagement _service = service; } - [HttpPost] - public virtual async Task CreateAsync(CreateTextInput input) + [HttpPut] + public virtual Task SetTextAsync(SetTextInput input) { - return await _service.CreateAsync(input); + return _service.SetTextAsync(input); } [HttpDelete] - [Route("{id}")] - public virtual async Task DeleteAsync(int id) - { - await _service.DeleteAsync(id); - } - - [HttpGet] - [Route("{id}")] - public virtual async Task GetAsync(int id) - { - return await _service.GetAsync(id); - } - - [HttpGet] - [Route("by-culture-key")] - public virtual async Task GetByCultureKeyAsync(GetTextByKeyInput input) - { - return await _service.GetByCultureKeyAsync(input); - } - - [HttpGet] - public virtual async Task> GetListAsync(GetTextsInput input) - { - return await _service.GetListAsync(input); - } - - [HttpPut] - [Route("{id}")] - public virtual async Task UpdateAsync(int id, UpdateTextInput input) + [Route("restore-to-default")] + public virtual Task RestoreToDefaultAsync(RestoreDefaultTextInput input) { - return await _service.UpdateAsync(id, input); + return _service.RestoreToDefaultAsync(input); } } } diff --git a/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/BackendAdminHttpApiHostModule.cs b/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/BackendAdminHttpApiHostModule.cs index b77eccd57..82022a179 100644 --- a/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/BackendAdminHttpApiHostModule.cs +++ b/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/BackendAdminHttpApiHostModule.cs @@ -1,5 +1,6 @@ using DotNetCore.CAP; using LINGYUN.Abp.AspNetCore.HttpOverrides; +using LINGYUN.Abp.AspNetCore.Mvc.Localization; using LINGYUN.Abp.Auditing; using LINGYUN.Abp.AuditLogging.Elasticsearch; using LINGYUN.Abp.Data.DbMigrator; @@ -50,6 +51,7 @@ namespace LY.MicroService.BackendAdmin; typeof(AbpLoggingSerilogElasticsearchModule), typeof(AbpAuditLoggingElasticsearchModule), typeof(AbpAspNetCoreMvcUiMultiTenancyModule), + typeof(AbpAspNetCoreMvcLocalizationModule), typeof(AbpSettingManagementApplicationModule), typeof(AbpSettingManagementHttpApiModule), typeof(AbpPermissionManagementApplicationModule), diff --git a/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/LY.MicroService.BackendAdmin.HttpApi.Host.csproj b/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/LY.MicroService.BackendAdmin.HttpApi.Host.csproj index ccdedc8f6..b81fc267a 100644 --- a/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/LY.MicroService.BackendAdmin.HttpApi.Host.csproj +++ b/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/LY.MicroService.BackendAdmin.HttpApi.Host.csproj @@ -57,6 +57,7 @@ + diff --git a/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/LocalizationManagementHttpApiHostModule.Configure.cs b/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/LocalizationManagementHttpApiHostModule.Configure.cs index 869e2ea22..0d7b28077 100644 --- a/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/LocalizationManagementHttpApiHostModule.Configure.cs +++ b/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/LocalizationManagementHttpApiHostModule.Configure.cs @@ -264,6 +264,11 @@ public partial class LocalizationManagementHttpApiHostModule options.Audience = configuration["AuthServer:ApiName"]; }); + if (isDevelopment) + { + // services.AddAlwaysAllowAuthorization(); + } + if (!isDevelopment) { var redis = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]); diff --git a/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/LY.MicroService.PlatformManagement.HttpApi.Host.csproj b/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/LY.MicroService.PlatformManagement.HttpApi.Host.csproj index b60c27e38..dc48a705d 100644 --- a/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/LY.MicroService.PlatformManagement.HttpApi.Host.csproj +++ b/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/LY.MicroService.PlatformManagement.HttpApi.Host.csproj @@ -48,6 +48,7 @@ + diff --git a/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/PlatformManagementHttpApiHostModule.cs b/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/PlatformManagementHttpApiHostModule.cs index bb39a3492..61c538e8f 100644 --- a/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/PlatformManagementHttpApiHostModule.cs +++ b/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/PlatformManagementHttpApiHostModule.cs @@ -1,5 +1,6 @@ using DotNetCore.CAP; using LINGYUN.Abp.AspNetCore.HttpOverrides; +using LINGYUN.Abp.AspNetCore.Mvc.Localization; using LINGYUN.Abp.AuditLogging.Elasticsearch; using LINGYUN.Abp.Authorization.OrganizationUnits; using LINGYUN.Abp.Data.DbMigrator; @@ -47,6 +48,7 @@ namespace LY.MicroService.PlatformManagement; typeof(AbpAspNetCoreSerilogModule), typeof(AbpAuditLoggingElasticsearchModule), typeof(AbpAspNetCoreMultiTenancyModule), + typeof(AbpAspNetCoreMvcLocalizationModule), typeof(AbpUINavigationVueVbenAdminModule), typeof(PlatformThemeVueVbenAdminModule), // typeof(AbpOssManagementAliyunModule), diff --git a/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/LY.MicroService.RealtimeMessage.HttpApi.Host.csproj b/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/LY.MicroService.RealtimeMessage.HttpApi.Host.csproj index dffadccd6..2f27951f0 100644 --- a/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/LY.MicroService.RealtimeMessage.HttpApi.Host.csproj +++ b/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/LY.MicroService.RealtimeMessage.HttpApi.Host.csproj @@ -53,6 +53,7 @@ + diff --git a/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/RealtimeMessageHttpApiHostModule.cs b/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/RealtimeMessageHttpApiHostModule.cs index 14272dbe2..2f3b30acd 100644 --- a/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/RealtimeMessageHttpApiHostModule.cs +++ b/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/RealtimeMessageHttpApiHostModule.cs @@ -1,5 +1,6 @@ using DotNetCore.CAP; using LINGYUN.Abp.AspNetCore.HttpOverrides; +using LINGYUN.Abp.AspNetCore.Mvc.Localization; using LINGYUN.Abp.AuditLogging.Elasticsearch; using LINGYUN.Abp.Authorization.OrganizationUnits; using LINGYUN.Abp.BackgroundTasks.ExceptionHandling; @@ -48,6 +49,7 @@ namespace LY.MicroService.RealtimeMessage; typeof(AbpAspNetCoreSerilogModule), typeof(AbpAuditLoggingElasticsearchModule), typeof(AbpAspNetCoreMultiTenancyModule), + typeof(AbpAspNetCoreMvcLocalizationModule), typeof(AbpMessageServiceApplicationModule), typeof(AbpMessageServiceHttpApiModule), typeof(AbpIdentityWeChatModule), diff --git a/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/LY.MicroService.TaskManagement.HttpApi.Host.csproj b/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/LY.MicroService.TaskManagement.HttpApi.Host.csproj index 16ad96963..802d1fea5 100644 --- a/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/LY.MicroService.TaskManagement.HttpApi.Host.csproj +++ b/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/LY.MicroService.TaskManagement.HttpApi.Host.csproj @@ -64,6 +64,8 @@ + + diff --git a/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/TaskManagementHttpApiHostModule.Configure.cs b/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/TaskManagementHttpApiHostModule.Configure.cs index 9c3f4aad6..5472f2cb3 100644 --- a/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/TaskManagementHttpApiHostModule.Configure.cs +++ b/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/TaskManagementHttpApiHostModule.Configure.cs @@ -1,6 +1,7 @@ using DotNetCore.CAP; using LINGYUN.Abp.ExceptionHandling; using LINGYUN.Abp.ExceptionHandling.Emailing; +using LINGYUN.Abp.Localization.CultureMap; using LINGYUN.Abp.Serilog.Enrichers.Application; using LINGYUN.Abp.Serilog.Enrichers.UniqueId; using Medallion.Threading; @@ -262,6 +263,18 @@ public partial class TaskManagementHttpApiHostModule // 动态语言支持 options.Resources.AddDynamic(); }); + + Configure(options => + { + var zhHansCultureMapInfo = new CultureMapInfo + { + TargetCulture = "zh-Hans", + SourceCultures = new string[] { "zh", "zh_CN", "zh-CN" } + }; + + options.CulturesMaps.Add(zhHansCultureMapInfo); + options.UiCulturesMaps.Add(zhHansCultureMapInfo); + }); } private void ConfigureSecurity(IServiceCollection services, IConfiguration configuration, bool isDevelopment = false) diff --git a/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/TaskManagementHttpApiHostModule.cs b/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/TaskManagementHttpApiHostModule.cs index 832d13e55..a54b1cc4f 100644 --- a/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/TaskManagementHttpApiHostModule.cs +++ b/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/TaskManagementHttpApiHostModule.cs @@ -1,4 +1,5 @@ using DotNetCore.CAP; +using LINGYUN.Abp.AspNetCore.Mvc.Localization; using LINGYUN.Abp.AuditLogging.Elasticsearch; using LINGYUN.Abp.Authorization.OrganizationUnits; using LINGYUN.Abp.BackgroundTasks.ExceptionHandling; @@ -7,6 +8,7 @@ using LINGYUN.Abp.BackgroundTasks.Quartz; using LINGYUN.Abp.Data.DbMigrator; using LINGYUN.Abp.EventBus.CAP; using LINGYUN.Abp.ExceptionHandling.Emailing; +using LINGYUN.Abp.Localization.CultureMap; using LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore; using LINGYUN.Abp.Saas.EntityFrameworkCore; using LINGYUN.Abp.Serilog.Enrichers.Application; @@ -47,6 +49,7 @@ namespace LY.MicroService.TaskManagement; typeof(AbpEmailingExceptionHandlingModule), typeof(AbpHttpClientIdentityModelWebModule), typeof(AbpAspNetCoreMultiTenancyModule), + typeof(AbpAspNetCoreMvcLocalizationModule), typeof(AbpBackgroundTasksJobsModule), typeof(AbpBackgroundTasksQuartzModule), typeof(AbpBackgroundTasksExceptionHandlingModule), @@ -63,6 +66,7 @@ namespace LY.MicroService.TaskManagement; typeof(AbpCachingStackExchangeRedisModule), typeof(AbpAspNetCoreMvcModule), typeof(AbpSwashbuckleModule), + typeof(AbpLocalizationCultureMapModule), typeof(AbpAutofacModule) )] public partial class TaskManagementHttpApiHostModule : AbpModule diff --git a/aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/LY.MicroService.WebhooksManagement.HttpApi.Host.csproj b/aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/LY.MicroService.WebhooksManagement.HttpApi.Host.csproj index 50c7fb7f7..8e6d24aa6 100644 --- a/aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/LY.MicroService.WebhooksManagement.HttpApi.Host.csproj +++ b/aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/LY.MicroService.WebhooksManagement.HttpApi.Host.csproj @@ -66,6 +66,7 @@ + diff --git a/aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/WebhooksManagementHttpApiHostModule.cs b/aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/WebhooksManagementHttpApiHostModule.cs index 6e4e7b44b..b71f54be1 100644 --- a/aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/WebhooksManagementHttpApiHostModule.cs +++ b/aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/WebhooksManagementHttpApiHostModule.cs @@ -1,4 +1,5 @@ using DotNetCore.CAP; +using LINGYUN.Abp.AspNetCore.Mvc.Localization; using LINGYUN.Abp.AspNetCore.Mvc.Wrapper; using LINGYUN.Abp.AuditLogging.Elasticsearch; using LINGYUN.Abp.Authorization.OrganizationUnits; @@ -56,6 +57,7 @@ namespace LY.MicroService.WebhooksManagement; typeof(AbpCAPEventBusModule), typeof(AbpHttpClientIdentityModelWebModule), typeof(AbpAspNetCoreMultiTenancyModule), + typeof(AbpAspNetCoreMvcLocalizationModule), typeof(AbpSaasEntityFrameworkCoreModule), typeof(AbpFeatureManagementEntityFrameworkCoreModule), typeof(AbpPermissionManagementEntityFrameworkCoreModule), diff --git a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/LY.MicroService.WorkflowManagement.HttpApi.Host.csproj b/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/LY.MicroService.WorkflowManagement.HttpApi.Host.csproj index 5248cd744..eeeeb4fcc 100644 --- a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/LY.MicroService.WorkflowManagement.HttpApi.Host.csproj +++ b/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/LY.MicroService.WorkflowManagement.HttpApi.Host.csproj @@ -45,6 +45,8 @@ + + diff --git a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/WorkflowManagementHttpApiHostModule.Configure.cs b/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/WorkflowManagementHttpApiHostModule.Configure.cs index 4b1d99b6b..a09337a80 100644 --- a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/WorkflowManagementHttpApiHostModule.Configure.cs +++ b/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/WorkflowManagementHttpApiHostModule.Configure.cs @@ -5,6 +5,7 @@ using Elsa.Persistence.EntityFramework.MySql; using LINGYUN.Abp.BlobStoring.OssManagement; using LINGYUN.Abp.ExceptionHandling; using LINGYUN.Abp.ExceptionHandling.Emailing; +using LINGYUN.Abp.Localization.CultureMap; using LINGYUN.Abp.Serilog.Enrichers.Application; using Medallion.Threading; using Medallion.Threading.Redis; @@ -247,6 +248,18 @@ public partial class WorkflowManagementHttpApiHostModule // 动态语言支持 options.Resources.AddDynamic(); }); + + Configure(options => + { + var zhHansCultureMapInfo = new CultureMapInfo + { + TargetCulture = "zh-Hans", + SourceCultures = new string[] { "zh", "zh_CN", "zh-CN" } + }; + + options.CulturesMaps.Add(zhHansCultureMapInfo); + options.UiCulturesMaps.Add(zhHansCultureMapInfo); + }); } private void ConfigureSecurity(IServiceCollection services, IConfiguration configuration, bool isDevelopment = false) diff --git a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/WorkflowManagementHttpApiHostModule.cs b/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/WorkflowManagementHttpApiHostModule.cs index 44f41790f..1a1f792ed 100644 --- a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/WorkflowManagementHttpApiHostModule.cs +++ b/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/WorkflowManagementHttpApiHostModule.cs @@ -1,7 +1,9 @@ -using LINGYUN.Abp.AuditLogging.Elasticsearch; +using LINGYUN.Abp.AspNetCore.Mvc.Localization; +using LINGYUN.Abp.AuditLogging.Elasticsearch; using LINGYUN.Abp.BlobStoring.OssManagement; using LINGYUN.Abp.Data.DbMigrator; using LINGYUN.Abp.ExceptionHandling.Emailing; +using LINGYUN.Abp.Localization.CultureMap; using LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore; using LINGYUN.Abp.Saas.EntityFrameworkCore; using LINGYUN.Abp.Serilog.Enrichers.Application; @@ -49,6 +51,7 @@ namespace LY.MicroService.WorkflowManagement; typeof(AbpEmailingExceptionHandlingModule), typeof(AbpHttpClientIdentityModelWebModule), typeof(AbpAspNetCoreMultiTenancyModule), + typeof(AbpAspNetCoreMvcLocalizationModule), typeof(AbpFeatureManagementEntityFrameworkCoreModule), typeof(AbpPermissionManagementEntityFrameworkCoreModule), typeof(AbpSettingManagementEntityFrameworkCoreModule), @@ -58,6 +61,7 @@ namespace LY.MicroService.WorkflowManagement; typeof(AbpCachingStackExchangeRedisModule), typeof(AbpAspNetCoreMvcModule), typeof(AbpSwashbuckleModule), + typeof(AbpLocalizationCultureMapModule), typeof(AbpAutofacModule) )] public partial class WorkflowManagementHttpApiHostModule : AbpModule diff --git a/aspnet-core/services/LY.MicroService.identityServer.HttpApi.Host/IdentityServerHttpApiHostModule.cs b/aspnet-core/services/LY.MicroService.identityServer.HttpApi.Host/IdentityServerHttpApiHostModule.cs index 8ae20e3ff..10e4c096f 100644 --- a/aspnet-core/services/LY.MicroService.identityServer.HttpApi.Host/IdentityServerHttpApiHostModule.cs +++ b/aspnet-core/services/LY.MicroService.identityServer.HttpApi.Host/IdentityServerHttpApiHostModule.cs @@ -1,5 +1,6 @@ using DotNetCore.CAP; using LINGYUN.Abp.AspNetCore.HttpOverrides; +using LINGYUN.Abp.AspNetCore.Mvc.Localization; using LINGYUN.Abp.AuditLogging.Elasticsearch; using LINGYUN.Abp.Authorization.OrganizationUnits; using LINGYUN.Abp.EventBus.CAP; @@ -32,6 +33,7 @@ namespace LY.MicroService.IdentityServer; typeof(AbpSerilogEnrichersUniqueIdModule), typeof(AbpAspNetCoreSerilogModule), typeof(AbpAspNetCoreMultiTenancyModule), + typeof(AbpAspNetCoreMvcLocalizationModule), typeof(LINGYUN.Abp.Account.AbpAccountApplicationModule), typeof(LINGYUN.Abp.Account.AbpAccountHttpApiModule), typeof(LINGYUN.Abp.Identity.AbpIdentityApplicationModule), diff --git a/aspnet-core/services/LY.MicroService.identityServer.HttpApi.Host/LY.MicroService.identityServer.HttpApi.Host.csproj b/aspnet-core/services/LY.MicroService.identityServer.HttpApi.Host/LY.MicroService.identityServer.HttpApi.Host.csproj index 47d3f1560..715b5fbf8 100644 --- a/aspnet-core/services/LY.MicroService.identityServer.HttpApi.Host/LY.MicroService.identityServer.HttpApi.Host.csproj +++ b/aspnet-core/services/LY.MicroService.identityServer.HttpApi.Host/LY.MicroService.identityServer.HttpApi.Host.csproj @@ -66,6 +66,7 @@ + From 9b682071dc444120e9304fe8adddadcc0ad31ce9 Mon Sep 17 00:00:00 2001 From: cKey <35512826+colinin@users.noreply.github.com> Date: Tue, 5 Jul 2022 15:43:59 +0800 Subject: [PATCH 2/3] feat: update ocelot routes. --- .../Properties/launchSettings.json | 2 +- .../ocelot.Development.json | 36 +++++++++++++++++-- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/gateways/internal/LINGYUN.MicroService.Internal.ApiGateway/src/LINGYUN.MicroService.Internal.ApiGateway/Properties/launchSettings.json b/gateways/internal/LINGYUN.MicroService.Internal.ApiGateway/src/LINGYUN.MicroService.Internal.ApiGateway/Properties/launchSettings.json index 20aace6df..6037e2ac6 100644 --- a/gateways/internal/LINGYUN.MicroService.Internal.ApiGateway/src/LINGYUN.MicroService.Internal.ApiGateway/Properties/launchSettings.json +++ b/gateways/internal/LINGYUN.MicroService.Internal.ApiGateway/src/LINGYUN.MicroService.Internal.ApiGateway/Properties/launchSettings.json @@ -12,7 +12,7 @@ "commandName": "Project", "launchBrowser": false, "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Production" + "ASPNETCORE_ENVIRONMENT": "Development" }, "applicationUrl": "https://127.0.0.1:30443;http://127.0.0.1:30000" } diff --git a/gateways/internal/LINGYUN.MicroService.Internal.ApiGateway/src/LINGYUN.MicroService.Internal.ApiGateway/ocelot.Development.json b/gateways/internal/LINGYUN.MicroService.Internal.ApiGateway/src/LINGYUN.MicroService.Internal.ApiGateway/ocelot.Development.json index 173b8d1e4..f2d556ab1 100644 --- a/gateways/internal/LINGYUN.MicroService.Internal.ApiGateway/src/LINGYUN.MicroService.Internal.ApiGateway/ocelot.Development.json +++ b/gateways/internal/LINGYUN.MicroService.Internal.ApiGateway/src/LINGYUN.MicroService.Internal.ApiGateway/ocelot.Development.json @@ -707,7 +707,7 @@ "Port": 30030 } ], - "UpstreamPathTemplate": "/api/abp/localization/application-configuration", + "UpstreamPathTemplate": "/api/abp/localization-management/application-configuration", "UpstreamHttpMethod": [ "GET" ], @@ -734,7 +734,7 @@ "Port": 30030 } ], - "UpstreamPathTemplate": "/api/abp/localization/api-definition", + "UpstreamPathTemplate": "/api/abp/localization-management/api-definition", "UpstreamHttpMethod": [ "GET" ], @@ -752,6 +752,38 @@ }, "Key": "localization-api-definition" }, + { + "DownstreamPathTemplate": "/api/abp/localization/{everything}", + "DownstreamScheme": "http", + "DownstreamHostAndPorts": [ + { + "Host": "127.0.0.1", + "Port": 30010 + } + ], + "UpstreamPathTemplate": "/api/abp/localization/{everything}", + "UpstreamHttpMethod": [ + "GET" + ], + "LoadBalancerOptions": { + "Type": "RoundRobin" + }, + "RateLimitOptions": { + "ClientWhitelist": [], + "EnableRateLimiting": true, + "Period": "1s", + "PeriodTimespan": 1, + "Limit": 5 + }, + "QoSOptions": { + "ExceptionsAllowedBeforeBreaking": 10, + "DurationOfBreak": 1000, + "TimeoutValue": 10000 + }, + "HttpHandlerOptions": { + "UseTracing": true + } + }, { "DownstreamPathTemplate": "/api/localization/{everything}", "DownstreamScheme": "http", From 2eefa08232dcffbfeb85ec3eb848caeb3ec4370a Mon Sep 17 00:00:00 2001 From: cKey <35512826+colinin@users.noreply.github.com> Date: Tue, 5 Jul 2022 16:07:50 +0800 Subject: [PATCH 3/3] fix: enable filter filtering --- .../Mvc/Localization/TextAppService.cs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) 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 3df08c82e..5bdcc0dfe 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 @@ -56,20 +56,24 @@ namespace LINGYUN.Abp.AspNetCore.Mvc.Localization if (input.ResourceName.IsNullOrWhiteSpace()) { - foreach (var resource in _localizationOptions.Resources) + var filterResources = _localizationOptions.Resources + .WhereIf(!input.Filter.IsNullOrWhiteSpace(), x => x.Value.ResourceName.Contains(input.Filter)); + + foreach (var resource in filterResources) { - result.AddRange(GetTextDifferences(resource.Value, input.CultureName, input.TargetCultureName, input.OnlyNull)); + result.AddRange(GetTextDifferences(resource.Value, 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) .FirstOrDefault(); if (resource != null) { - result.AddRange(GetTextDifferences(resource, input.CultureName, input.TargetCultureName, input.OnlyNull)); + result.AddRange(GetTextDifferences(resource, input.CultureName, input.TargetCultureName, input.Filter, input.OnlyNull)); } } @@ -80,6 +84,7 @@ namespace LINGYUN.Abp.AspNetCore.Mvc.Localization LocalizationResource resource, string cultureName, string targetCultureName, + string filter = null, bool? onlyNull = null) { var result = new List(); @@ -90,7 +95,8 @@ namespace LINGYUN.Abp.AspNetCore.Mvc.Localization using (CultureHelper.Use(cultureName)) { - localizedStrings = localizer.GetAllStrings(true); + localizedStrings = localizer.GetAllStrings(true) + .WhereIf(!filter.IsNullOrWhiteSpace(), x => x.Name.Contains(filter)); } if (Equals(cultureName, targetCultureName)) @@ -101,7 +107,8 @@ namespace LINGYUN.Abp.AspNetCore.Mvc.Localization { using (CultureHelper.Use(targetCultureName)) { - targetLocalizedStrings = localizer.GetAllStrings(true); + targetLocalizedStrings = localizer.GetAllStrings(true) + .WhereIf(!filter.IsNullOrWhiteSpace(), x => x.Name.Contains(filter)); } }