From 59a488d7dbe4a0cc1c79dcc7862d12f92192e363 Mon Sep 17 00:00:00 2001 From: cKey <35512826+colinin@users.noreply.github.com> Date: Thu, 2 Dec 2021 14:22:22 +0800 Subject: [PATCH] =?UTF-8?q?fix(localization):=20=E8=A7=A3=E5=86=B3?= =?UTF-8?q?=E6=9C=AC=E5=9C=B0=E5=8C=96=E5=90=8D=E7=A7=B0=E5=B7=AE=E5=BC=82?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- aspnet-core/LINGYUN.MicroService.All.sln | 7 +++ ...LINGYUN.Abp.Localization.CultureMap.csproj | 14 +++++ .../AbpCultureMapRequestCultureProvider.cs | 62 +++++++++++++++++++ .../AbpLocalizationCultureMapModule.cs | 10 +++ .../AbpLocalizationCultureMapOptions.cs | 17 +++++ .../Localization/CultureMap/CultureMapInfo.cs | 9 +++ ...pCultureMapApplicationBuilderExtensions.cs | 19 ++++++ .../README.md | 53 ++++++++++++++++ .../AuthIdentityServerModule.Configure.cs | 13 ++++ .../AuthIdentityServerModule.cs | 6 +- .../AuthServer.Host/AuthServer.Host.csproj | 1 + .../BackendAdminHostModule.Configure.cs | 25 ++++---- .../BackendAdminHostModule.cs | 8 ++- ...NGYUN.Abp.BackendAdmin.HttpApi.Host.csproj | 1 + .../Properties/launchSettings.json | 2 +- .../ApiGatewayHttpApiHostModule.Configure.cs | 13 ++++ .../ApiGatewayHttpApiHostModule.cs | 4 +- .../LINGYUN.ApiGateway.HttpApi.Host.csproj | 1 + ...yServerAdminHttpApiHostModule.Configure.cs | 13 ++++ ...AbpIdentityServerAdminHttpApiHostModule.cs | 8 ++- ...UN.Abp.IdentityServer4.HttpApi.Host.csproj | 1 + ...onManagementHttpApiHostModule.Configure.cs | 13 ++++ ...LocalizationManagementHttpApiHostModule.cs | 6 +- ...LocalizationManagement.HttpApi.Host.csproj | 1 + ...ssageServiceHttpApiHostModule.Configure.cs | 13 ++++ .../AbpMessageServiceHttpApiHostModule.cs | 9 ++- ...YUN.Abp.MessageService.HttpApi.Host.csproj | 1 + .../AppPlatformHttpApiHostModule.Configure.cs | 13 ++++ .../AppPlatformHttpApiHostModule.cs | 13 ++-- .../LINGYUN.Platform.HttpApi.Host.csproj | 1 + 30 files changed, 327 insertions(+), 30 deletions(-) create mode 100644 aspnet-core/modules/localization/LINGYUN.Abp.Localization.CultureMap/LINGYUN.Abp.Localization.CultureMap.csproj create mode 100644 aspnet-core/modules/localization/LINGYUN.Abp.Localization.CultureMap/LINGYUN/Abp/Localization/CultureMap/AbpCultureMapRequestCultureProvider.cs create mode 100644 aspnet-core/modules/localization/LINGYUN.Abp.Localization.CultureMap/LINGYUN/Abp/Localization/CultureMap/AbpLocalizationCultureMapModule.cs create mode 100644 aspnet-core/modules/localization/LINGYUN.Abp.Localization.CultureMap/LINGYUN/Abp/Localization/CultureMap/AbpLocalizationCultureMapOptions.cs create mode 100644 aspnet-core/modules/localization/LINGYUN.Abp.Localization.CultureMap/LINGYUN/Abp/Localization/CultureMap/CultureMapInfo.cs create mode 100644 aspnet-core/modules/localization/LINGYUN.Abp.Localization.CultureMap/Microsoft/AspNetCore/Builder/AbpCultureMapApplicationBuilderExtensions.cs create mode 100644 aspnet-core/modules/localization/LINGYUN.Abp.Localization.CultureMap/README.md diff --git a/aspnet-core/LINGYUN.MicroService.All.sln b/aspnet-core/LINGYUN.MicroService.All.sln index 453a3ab18..ef5c031ee 100644 --- a/aspnet-core/LINGYUN.MicroService.All.sln +++ b/aspnet-core/LINGYUN.MicroService.All.sln @@ -369,6 +369,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dapr.Actors", " EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dapr.Actors.AspNetCore", "modules\dapr\LINGYUN.Abp.Dapr.Actors.AspNetCore\LINGYUN.Abp.Dapr.Actors.AspNetCore.csproj", "{995756A1-A379-4797-89F0-87D219B5AF00}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Localization.CultureMap", "modules\localization\LINGYUN.Abp.Localization.CultureMap\LINGYUN.Abp.Localization.CultureMap.csproj", "{EB73D2CC-B1BE-471A-B76E-35F288CD0E16}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -963,6 +965,10 @@ Global {995756A1-A379-4797-89F0-87D219B5AF00}.Debug|Any CPU.Build.0 = Debug|Any CPU {995756A1-A379-4797-89F0-87D219B5AF00}.Release|Any CPU.ActiveCfg = Release|Any CPU {995756A1-A379-4797-89F0-87D219B5AF00}.Release|Any CPU.Build.0 = Release|Any CPU + {EB73D2CC-B1BE-471A-B76E-35F288CD0E16}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EB73D2CC-B1BE-471A-B76E-35F288CD0E16}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EB73D2CC-B1BE-471A-B76E-35F288CD0E16}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EB73D2CC-B1BE-471A-B76E-35F288CD0E16}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1145,6 +1151,7 @@ Global {93317D44-835C-4F5E-B85D-580D51D5FFF4} = {DC33925B-264D-421B-96CC-46F853CBCC70} {DAF80936-FBEC-45AB-92DF-34966B0148FD} = {DC33925B-264D-421B-96CC-46F853CBCC70} {995756A1-A379-4797-89F0-87D219B5AF00} = {DC33925B-264D-421B-96CC-46F853CBCC70} + {EB73D2CC-B1BE-471A-B76E-35F288CD0E16} = {90E88EAC-4291-4406-8D88-EFDF61B11292} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {C95FDF91-16F2-4A8B-A4BE-0E62D1B66718} diff --git a/aspnet-core/modules/localization/LINGYUN.Abp.Localization.CultureMap/LINGYUN.Abp.Localization.CultureMap.csproj b/aspnet-core/modules/localization/LINGYUN.Abp.Localization.CultureMap/LINGYUN.Abp.Localization.CultureMap.csproj new file mode 100644 index 000000000..9ea6a6079 --- /dev/null +++ b/aspnet-core/modules/localization/LINGYUN.Abp.Localization.CultureMap/LINGYUN.Abp.Localization.CultureMap.csproj @@ -0,0 +1,14 @@ + + + + + + net5.0 + + + + + + + + diff --git a/aspnet-core/modules/localization/LINGYUN.Abp.Localization.CultureMap/LINGYUN/Abp/Localization/CultureMap/AbpCultureMapRequestCultureProvider.cs b/aspnet-core/modules/localization/LINGYUN.Abp.Localization.CultureMap/LINGYUN/Abp/Localization/CultureMap/AbpCultureMapRequestCultureProvider.cs new file mode 100644 index 000000000..1202c5aba --- /dev/null +++ b/aspnet-core/modules/localization/LINGYUN.Abp.Localization.CultureMap/LINGYUN/Abp/Localization/CultureMap/AbpCultureMapRequestCultureProvider.cs @@ -0,0 +1,62 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Localization; +using Microsoft.AspNetCore.RequestLocalization; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using Microsoft.Extensions.Primitives; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace LINGYUN.Abp.Localization.CultureMap +{ + public class AbpCultureMapRequestCultureProvider : RequestCultureProvider + { + public override async Task DetermineProviderCultureResult(HttpContext httpContext) + { + if (httpContext == null) + { + throw new ArgumentNullException(nameof(httpContext)); + } + + var option = httpContext.RequestServices.GetRequiredService>().Value; + + var mapCultures = new List(); + var mapUiCultures = new List(); + + var requestLocalizationOptionsProvider = httpContext.RequestServices.GetRequiredService(); + foreach (var provider in (await requestLocalizationOptionsProvider.GetLocalizationOptionsAsync()).RequestCultureProviders) + { + if (provider == this) + { + continue; + } + + var providerCultureResult = await provider.DetermineProviderCultureResult(httpContext); + if (providerCultureResult == null) + { + continue; + } + + mapCultures.AddRange(providerCultureResult.Cultures.Where(x => x.HasValue) + .Select(culture => + { + var map = option.CulturesMaps.FirstOrDefault(x => + x.SourceCultures.Contains(culture.Value, StringComparer.OrdinalIgnoreCase)); + return new StringSegment(map?.TargetCulture ?? culture.Value); + })); + + mapUiCultures.AddRange(providerCultureResult.UICultures.Where(x => x.HasValue) + .Select(culture => + { + var map = option.UiCulturesMaps.FirstOrDefault(x => + x.SourceCultures.Contains(culture.Value, StringComparer.OrdinalIgnoreCase)); + return new StringSegment(map?.TargetCulture ?? culture.Value); + })); + } + + return new ProviderCultureResult(mapCultures, mapUiCultures); + } + } +} diff --git a/aspnet-core/modules/localization/LINGYUN.Abp.Localization.CultureMap/LINGYUN/Abp/Localization/CultureMap/AbpLocalizationCultureMapModule.cs b/aspnet-core/modules/localization/LINGYUN.Abp.Localization.CultureMap/LINGYUN/Abp/Localization/CultureMap/AbpLocalizationCultureMapModule.cs new file mode 100644 index 000000000..ca79bbf08 --- /dev/null +++ b/aspnet-core/modules/localization/LINGYUN.Abp.Localization.CultureMap/LINGYUN/Abp/Localization/CultureMap/AbpLocalizationCultureMapModule.cs @@ -0,0 +1,10 @@ +using Volo.Abp.AspNetCore; +using Volo.Abp.Modularity; + +namespace LINGYUN.Abp.Localization.CultureMap +{ + [DependsOn(typeof(AbpAspNetCoreModule))] + public class AbpLocalizationCultureMapModule : AbpModule + { + } +} diff --git a/aspnet-core/modules/localization/LINGYUN.Abp.Localization.CultureMap/LINGYUN/Abp/Localization/CultureMap/AbpLocalizationCultureMapOptions.cs b/aspnet-core/modules/localization/LINGYUN.Abp.Localization.CultureMap/LINGYUN/Abp/Localization/CultureMap/AbpLocalizationCultureMapOptions.cs new file mode 100644 index 000000000..65eb0f775 --- /dev/null +++ b/aspnet-core/modules/localization/LINGYUN.Abp.Localization.CultureMap/LINGYUN/Abp/Localization/CultureMap/AbpLocalizationCultureMapOptions.cs @@ -0,0 +1,17 @@ +using System.Collections.Generic; + +namespace LINGYUN.Abp.Localization.CultureMap +{ + public class AbpLocalizationCultureMapOptions + { + public List CulturesMaps { get; } + + public List UiCulturesMaps { get; } + + public AbpLocalizationCultureMapOptions() + { + CulturesMaps = new List(); + UiCulturesMaps = new List(); + } + } +} diff --git a/aspnet-core/modules/localization/LINGYUN.Abp.Localization.CultureMap/LINGYUN/Abp/Localization/CultureMap/CultureMapInfo.cs b/aspnet-core/modules/localization/LINGYUN.Abp.Localization.CultureMap/LINGYUN/Abp/Localization/CultureMap/CultureMapInfo.cs new file mode 100644 index 000000000..6269e852b --- /dev/null +++ b/aspnet-core/modules/localization/LINGYUN.Abp.Localization.CultureMap/LINGYUN/Abp/Localization/CultureMap/CultureMapInfo.cs @@ -0,0 +1,9 @@ +namespace LINGYUN.Abp.Localization.CultureMap +{ + public class CultureMapInfo + { + public string TargetCulture { get; set; } + + public string[] SourceCultures { get; set; } + } +} diff --git a/aspnet-core/modules/localization/LINGYUN.Abp.Localization.CultureMap/Microsoft/AspNetCore/Builder/AbpCultureMapApplicationBuilderExtensions.cs b/aspnet-core/modules/localization/LINGYUN.Abp.Localization.CultureMap/Microsoft/AspNetCore/Builder/AbpCultureMapApplicationBuilderExtensions.cs new file mode 100644 index 000000000..42b6639d5 --- /dev/null +++ b/aspnet-core/modules/localization/LINGYUN.Abp.Localization.CultureMap/Microsoft/AspNetCore/Builder/AbpCultureMapApplicationBuilderExtensions.cs @@ -0,0 +1,19 @@ +using LINGYUN.Abp.Localization.CultureMap; +using System; + +namespace Microsoft.AspNetCore.Builder +{ + public static class AbpCultureMapApplicationBuilderExtensions + { + public static IApplicationBuilder UseMapRequestLocalization( + this IApplicationBuilder app, + Action optionsAction = null) + { + return app.UseAbpRequestLocalization(options => + { + options.RequestCultureProviders.Insert(0, new AbpCultureMapRequestCultureProvider()); + optionsAction?.Invoke(options); + }); + } + } +} diff --git a/aspnet-core/modules/localization/LINGYUN.Abp.Localization.CultureMap/README.md b/aspnet-core/modules/localization/LINGYUN.Abp.Localization.CultureMap/README.md new file mode 100644 index 000000000..6fb751da2 --- /dev/null +++ b/aspnet-core/modules/localization/LINGYUN.Abp.Localization.CultureMap/README.md @@ -0,0 +1,53 @@ +# LINGYUN.Abp.Localization.CultureMap + +## 模块说明 + +解决存在多种格式的区域性本地化问题 + +See: https://github.com/maliming/Owl.Abp.CultureMap + +### 基础模块 + +### 高阶模块 + +### 权限定义 + +### 功能定义 + +### 配置定义 + +### 如何使用 + + +```csharp + + [DependsOn( + typeof(AbpLocalizationCultureMapModule))] + public class YouProjectModule : AbpModule + { + public override void ConfigureServices(ServiceConfigurationContext context) + { + 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); + }); + } + + public override void OnApplicationInitialization(ApplicationInitializationContext context) + { + var app = context.GetApplicationBuilder(); + + app.UseMapRequestLocalization(); + } + } + +``` + +### 更新日志 diff --git a/aspnet-core/services/account/AuthServer.Host/AuthIdentityServerModule.Configure.cs b/aspnet-core/services/account/AuthServer.Host/AuthIdentityServerModule.Configure.cs index a32d7b32b..6ad326f66 100644 --- a/aspnet-core/services/account/AuthServer.Host/AuthIdentityServerModule.Configure.cs +++ b/aspnet-core/services/account/AuthServer.Host/AuthIdentityServerModule.Configure.cs @@ -1,6 +1,7 @@ using AuthServer.IdentityResources; using DotNetCore.CAP; using LINGYUN.Abp.IdentityServer.IdentityResources; +using LINGYUN.Abp.Localization.CultureMap; using LINGYUN.Abp.Serilog.Enrichers.Application; using Microsoft.AspNetCore.Cors; using Microsoft.AspNetCore.DataProtection; @@ -159,6 +160,18 @@ namespace AuthServer.Host .Get() .AddVirtualJson("/Localization/Resources"); }); + + 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 ConfigureAuditing() { diff --git a/aspnet-core/services/account/AuthServer.Host/AuthIdentityServerModule.cs b/aspnet-core/services/account/AuthServer.Host/AuthIdentityServerModule.cs index 74aea7157..f06771acf 100644 --- a/aspnet-core/services/account/AuthServer.Host/AuthIdentityServerModule.cs +++ b/aspnet-core/services/account/AuthServer.Host/AuthIdentityServerModule.cs @@ -6,6 +6,7 @@ using LINGYUN.Abp.Identity.EntityFrameworkCore; using LINGYUN.Abp.IdentityServer; using LINGYUN.Abp.IdentityServer.EntityFrameworkCore; using LINGYUN.Abp.IdentityServer.WeChat; +using LINGYUN.Abp.Localization.CultureMap; using LINGYUN.Abp.MultiTenancy.DbFinder; using LINGYUN.Abp.PermissionManagement.Identity; using LINGYUN.Abp.Serilog.Enrichers.Application; @@ -58,6 +59,7 @@ namespace AuthServer.Host typeof(AbpAspNetCoreAuthenticationJwtBearerModule), typeof(AbpAuditLoggingElasticsearchModule), // 放在 AbpIdentity 模块之后,避免被覆盖 typeof(AbpAspNetCoreHttpOverridesModule), + typeof(AbpLocalizationCultureMapModule), typeof(AbpDbFinderMultiTenancyModule), typeof(AbpCAPEventBusModule), typeof(AbpAliyunSmsModule) @@ -118,10 +120,10 @@ namespace AuthServer.Host app.UseRouting(); app.UseCors(DefaultCorsPolicyName); app.UseWeChatSignature(); - app.UseMultiTenancy(); app.UseAuthentication(); app.UseJwtTokenMiddleware(); - app.UseAbpRequestLocalization(); + app.UseMultiTenancy(); + app.UseMapRequestLocalization(); app.UseIdentityServer(); app.UseAuthorization(); app.UseAuditing(); diff --git a/aspnet-core/services/account/AuthServer.Host/AuthServer.Host.csproj b/aspnet-core/services/account/AuthServer.Host/AuthServer.Host.csproj index 9653ce4ca..57a81a44f 100644 --- a/aspnet-core/services/account/AuthServer.Host/AuthServer.Host.csproj +++ b/aspnet-core/services/account/AuthServer.Host/AuthServer.Host.csproj @@ -66,6 +66,7 @@ + diff --git a/aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/BackendAdminHostModule.Configure.cs b/aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/BackendAdminHostModule.Configure.cs index f5e633a0c..281b34480 100644 --- a/aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/BackendAdminHostModule.Configure.cs +++ b/aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/BackendAdminHostModule.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 Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.DataProtection; @@ -109,7 +110,7 @@ namespace LINGYUN.Abp.BackendAdmin options.SendStackTrace = true; // 未指定异常接收者的默认接收邮件 // 请指定自己的邮件地址 - // options.DefaultReceiveEmail = "colin.in@foxmail.com"; + // options.DefaultReceiveEmail = ""; }); } @@ -239,18 +240,20 @@ namespace LINGYUN.Abp.BackendAdmin "vben-admin-ui", new NameValue("zh_CN", "zh-Hans")); - options - .AddLanguageFilesMapOrUpdate( - "vue-admin-element-ui", - new NameValue("zh-Hans", "zh"), - new NameValue("en", "en")); - options - .AddLanguageFilesMapOrUpdate( - "vben-admin-ui", - new NameValue("zh_CN", "zh-Hans")); - 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/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/BackendAdminHostModule.cs b/aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/BackendAdminHostModule.cs index 618b10e50..fb1a778c4 100644 --- a/aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/BackendAdminHostModule.cs +++ b/aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/BackendAdminHostModule.cs @@ -5,6 +5,7 @@ using LINGYUN.Abp.Data.DbMigrator; using LINGYUN.Abp.EventBus.CAP; using LINGYUN.Abp.ExceptionHandling.Emailing; using LINGYUN.Abp.FeatureManagement; +using LINGYUN.Abp.Localization.CultureMap; using LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore; using LINGYUN.Abp.Logging.Serilog.Elasticsearch; using LINGYUN.Abp.MultiTenancy.DbFinder; @@ -73,6 +74,7 @@ namespace LINGYUN.Abp.BackendAdmin typeof(AbpDbFinderMultiTenancyModule), typeof(AbpCachingStackExchangeRedisModule), typeof(AbpAspNetCoreHttpOverridesModule), + typeof(AbpLocalizationCultureMapModule), typeof(AbpAutofacModule) )] public partial class BackendAdminHostModule : AbpModule @@ -110,8 +112,6 @@ namespace LINGYUN.Abp.BackendAdmin app.UseCorrelationId(); // 虚拟文件系统 app.UseStaticFiles(); - // 本地化 - app.UseAbpRequestLocalization(); //路由 app.UseRouting(); // 认证 @@ -120,6 +120,10 @@ namespace LINGYUN.Abp.BackendAdmin app.UseJwtTokenMiddleware(); // 多租户 app.UseMultiTenancy(); + // 本地化 + app.UseMapRequestLocalization(); + // 授权 + app.UseAuthorization(); // Swagger app.UseSwagger(); // Swagger可视化界面 diff --git a/aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/LINGYUN.Abp.BackendAdmin.HttpApi.Host.csproj b/aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/LINGYUN.Abp.BackendAdmin.HttpApi.Host.csproj index 5197047f3..682bece82 100644 --- a/aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/LINGYUN.Abp.BackendAdmin.HttpApi.Host.csproj +++ b/aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/LINGYUN.Abp.BackendAdmin.HttpApi.Host.csproj @@ -72,6 +72,7 @@ + diff --git a/aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Properties/launchSettings.json b/aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Properties/launchSettings.json index 7a6916353..f04e44238 100644 --- a/aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Properties/launchSettings.json +++ b/aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Properties/launchSettings.json @@ -13,7 +13,7 @@ "launchBrowser": false, "applicationUrl": "http://0.0.0.0:30010", "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" + "ASPNETCORE_ENVIRONMENT": "Production" } } } diff --git a/aspnet-core/services/apigateway/LINGYUN.ApiGateway.HttpApi.Host/ApiGatewayHttpApiHostModule.Configure.cs b/aspnet-core/services/apigateway/LINGYUN.ApiGateway.HttpApi.Host/ApiGatewayHttpApiHostModule.Configure.cs index 0da04a642..4ebceba81 100644 --- a/aspnet-core/services/apigateway/LINGYUN.ApiGateway.HttpApi.Host/ApiGatewayHttpApiHostModule.Configure.cs +++ b/aspnet-core/services/apigateway/LINGYUN.ApiGateway.HttpApi.Host/ApiGatewayHttpApiHostModule.Configure.cs @@ -1,4 +1,5 @@ using DotNetCore.CAP; +using LINGYUN.Abp.Localization.CultureMap; using LINGYUN.Abp.Serilog.Enrichers.Application; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.DataProtection; @@ -170,6 +171,18 @@ namespace LINGYUN.ApiGateway options.Languages.Add(new LanguageInfo("en", "en", "English")); options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文")); }); + + 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/apigateway/LINGYUN.ApiGateway.HttpApi.Host/ApiGatewayHttpApiHostModule.cs b/aspnet-core/services/apigateway/LINGYUN.ApiGateway.HttpApi.Host/ApiGatewayHttpApiHostModule.cs index 1b432e782..2103a9f01 100644 --- a/aspnet-core/services/apigateway/LINGYUN.ApiGateway.HttpApi.Host/ApiGatewayHttpApiHostModule.cs +++ b/aspnet-core/services/apigateway/LINGYUN.ApiGateway.HttpApi.Host/ApiGatewayHttpApiHostModule.cs @@ -1,6 +1,7 @@ using LINGYUN.Abp.AspNetCore.HttpOverrides; using LINGYUN.Abp.AuditLogging.Elasticsearch; using LINGYUN.Abp.EventBus.CAP; +using LINGYUN.Abp.Localization.CultureMap; using LINGYUN.Abp.MultiTenancy.DbFinder; using LINGYUN.Abp.Serilog.Enrichers.Application; using LINGYUN.ApiGateway.EntityFrameworkCore; @@ -35,6 +36,7 @@ namespace LINGYUN.ApiGateway typeof(AbpDbFinderMultiTenancyModule), typeof(AbpCachingStackExchangeRedisModule), typeof(AbpAspNetCoreHttpOverridesModule), + typeof(AbpLocalizationCultureMapModule), typeof(AbpAutofacModule) )] public partial class ApiGatewayHttpApiHostModule : AbpModule @@ -78,7 +80,7 @@ namespace LINGYUN.ApiGateway // 多租户 // app.UseMultiTenancy(); // 本地化 - app.UseAbpRequestLocalization(); + app.UseMapRequestLocalization(); // 认证 app.UseAuthorization(); // Swagger diff --git a/aspnet-core/services/apigateway/LINGYUN.ApiGateway.HttpApi.Host/LINGYUN.ApiGateway.HttpApi.Host.csproj b/aspnet-core/services/apigateway/LINGYUN.ApiGateway.HttpApi.Host/LINGYUN.ApiGateway.HttpApi.Host.csproj index edc01395f..dc87ead98 100644 --- a/aspnet-core/services/apigateway/LINGYUN.ApiGateway.HttpApi.Host/LINGYUN.ApiGateway.HttpApi.Host.csproj +++ b/aspnet-core/services/apigateway/LINGYUN.ApiGateway.HttpApi.Host/LINGYUN.ApiGateway.HttpApi.Host.csproj @@ -46,6 +46,7 @@ + diff --git a/aspnet-core/services/identity-server/LINGYUN.Abp.IdentityServer4.HttpApi.Host/AbpIdentityServerAdminHttpApiHostModule.Configure.cs b/aspnet-core/services/identity-server/LINGYUN.Abp.IdentityServer4.HttpApi.Host/AbpIdentityServerAdminHttpApiHostModule.Configure.cs index 7f332cb24..275f0e929 100644 --- a/aspnet-core/services/identity-server/LINGYUN.Abp.IdentityServer4.HttpApi.Host/AbpIdentityServerAdminHttpApiHostModule.Configure.cs +++ b/aspnet-core/services/identity-server/LINGYUN.Abp.IdentityServer4.HttpApi.Host/AbpIdentityServerAdminHttpApiHostModule.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 Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.DataProtection; @@ -236,6 +237,18 @@ namespace LINGYUN.Abp.IdentityServer4 options.Resources.AddDynamic(typeof(IdentityResource)); }); + + 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/identity-server/LINGYUN.Abp.IdentityServer4.HttpApi.Host/AbpIdentityServerAdminHttpApiHostModule.cs b/aspnet-core/services/identity-server/LINGYUN.Abp.IdentityServer4.HttpApi.Host/AbpIdentityServerAdminHttpApiHostModule.cs index a4b948a87..72156166d 100644 --- a/aspnet-core/services/identity-server/LINGYUN.Abp.IdentityServer4.HttpApi.Host/AbpIdentityServerAdminHttpApiHostModule.cs +++ b/aspnet-core/services/identity-server/LINGYUN.Abp.IdentityServer4.HttpApi.Host/AbpIdentityServerAdminHttpApiHostModule.cs @@ -2,6 +2,7 @@ using LINGYUN.Abp.AspNetCore.HttpOverrides; using LINGYUN.Abp.AuditLogging.Elasticsearch; using LINGYUN.Abp.EventBus.CAP; using LINGYUN.Abp.ExceptionHandling.Emailing; +using LINGYUN.Abp.Localization.CultureMap; using LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore; using LINGYUN.Abp.MultiTenancy.DbFinder; using LINGYUN.Abp.Serilog.Enrichers.Application; @@ -49,6 +50,7 @@ namespace LINGYUN.Abp.IdentityServer4 typeof(AbpDbFinderMultiTenancyModule), typeof(AbpCachingStackExchangeRedisModule), typeof(AbpAspNetCoreHttpOverridesModule), + typeof(AbpLocalizationCultureMapModule), typeof(AbpAutofacModule) )] public partial class AbpIdentityServerAdminHttpApiHostModule : AbpModule @@ -87,8 +89,6 @@ namespace LINGYUN.Abp.IdentityServer4 app.UseCorrelationId(); // 虚拟文件系统 app.UseStaticFiles(); - // 本地化 - app.UseAbpRequestLocalization(); //路由 app.UseRouting(); // 认证 @@ -98,6 +98,10 @@ namespace LINGYUN.Abp.IdentityServer4 app.UseJwtTokenMiddleware(); // 多租户 app.UseMultiTenancy(); + // 本地化 + app.UseMapRequestLocalization(); + // 授权 + app.UseAuthorization(); // Swagger app.UseSwagger(); // Swagger可视化界面 diff --git a/aspnet-core/services/identity-server/LINGYUN.Abp.IdentityServer4.HttpApi.Host/LINGYUN.Abp.IdentityServer4.HttpApi.Host.csproj b/aspnet-core/services/identity-server/LINGYUN.Abp.IdentityServer4.HttpApi.Host/LINGYUN.Abp.IdentityServer4.HttpApi.Host.csproj index 8729739e1..bf642f950 100644 --- a/aspnet-core/services/identity-server/LINGYUN.Abp.IdentityServer4.HttpApi.Host/LINGYUN.Abp.IdentityServer4.HttpApi.Host.csproj +++ b/aspnet-core/services/identity-server/LINGYUN.Abp.IdentityServer4.HttpApi.Host/LINGYUN.Abp.IdentityServer4.HttpApi.Host.csproj @@ -68,6 +68,7 @@ + diff --git a/aspnet-core/services/localization/LINGYUN.Abp.LocalizationManagement.HttpApi.Host/AbpLocalizationManagementHttpApiHostModule.Configure.cs b/aspnet-core/services/localization/LINGYUN.Abp.LocalizationManagement.HttpApi.Host/AbpLocalizationManagementHttpApiHostModule.Configure.cs index 83fb816eb..5848420e0 100644 --- a/aspnet-core/services/localization/LINGYUN.Abp.LocalizationManagement.HttpApi.Host/AbpLocalizationManagementHttpApiHostModule.Configure.cs +++ b/aspnet-core/services/localization/LINGYUN.Abp.LocalizationManagement.HttpApi.Host/AbpLocalizationManagementHttpApiHostModule.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 Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.DataProtection; @@ -190,6 +191,18 @@ namespace LINGYUN.Abp.LocalizationManagement 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/localization/LINGYUN.Abp.LocalizationManagement.HttpApi.Host/AbpLocalizationManagementHttpApiHostModule.cs b/aspnet-core/services/localization/LINGYUN.Abp.LocalizationManagement.HttpApi.Host/AbpLocalizationManagementHttpApiHostModule.cs index ada49950a..b38bc97a8 100644 --- a/aspnet-core/services/localization/LINGYUN.Abp.LocalizationManagement.HttpApi.Host/AbpLocalizationManagementHttpApiHostModule.cs +++ b/aspnet-core/services/localization/LINGYUN.Abp.LocalizationManagement.HttpApi.Host/AbpLocalizationManagementHttpApiHostModule.cs @@ -3,6 +3,7 @@ using LINGYUN.Abp.AuditLogging.Elasticsearch; 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.MultiTenancy.DbFinder; using LINGYUN.Abp.Serilog.Enrichers.Application; @@ -42,6 +43,7 @@ namespace LINGYUN.Abp.LocalizationManagement typeof(AbpDbFinderMultiTenancyModule), typeof(AbpCachingStackExchangeRedisModule), typeof(AbpAspNetCoreHttpOverridesModule), + typeof(AbpLocalizationCultureMapModule), typeof(AbpAutofacModule) )] public partial class AbpLocalizationManagementHttpApiHostModule : AbpModule @@ -80,14 +82,14 @@ namespace LINGYUN.Abp.LocalizationManagement app.UseCorrelationId(); // 虚拟文件系统 app.UseStaticFiles(); - // 本地化 - app.UseAbpRequestLocalization(); //路由 app.UseRouting(); // 认证 app.UseAuthentication(); // jwt app.UseJwtTokenMiddleware(); + // 本地化 + app.UseMapRequestLocalization(); // 授权 app.UseAuthorization(); // Swagger diff --git a/aspnet-core/services/localization/LINGYUN.Abp.LocalizationManagement.HttpApi.Host/LINGYUN.Abp.LocalizationManagement.HttpApi.Host.csproj b/aspnet-core/services/localization/LINGYUN.Abp.LocalizationManagement.HttpApi.Host/LINGYUN.Abp.LocalizationManagement.HttpApi.Host.csproj index 6bdff94f9..062871c0f 100644 --- a/aspnet-core/services/localization/LINGYUN.Abp.LocalizationManagement.HttpApi.Host/LINGYUN.Abp.LocalizationManagement.HttpApi.Host.csproj +++ b/aspnet-core/services/localization/LINGYUN.Abp.LocalizationManagement.HttpApi.Host/LINGYUN.Abp.LocalizationManagement.HttpApi.Host.csproj @@ -41,6 +41,7 @@ + diff --git a/aspnet-core/services/messages/LINGYUN.Abp.MessageService.HttpApi.Host/AbpMessageServiceHttpApiHostModule.Configure.cs b/aspnet-core/services/messages/LINGYUN.Abp.MessageService.HttpApi.Host/AbpMessageServiceHttpApiHostModule.Configure.cs index 0a925d5ab..3378cd036 100644 --- a/aspnet-core/services/messages/LINGYUN.Abp.MessageService.HttpApi.Host/AbpMessageServiceHttpApiHostModule.Configure.cs +++ b/aspnet-core/services/messages/LINGYUN.Abp.MessageService.HttpApi.Host/AbpMessageServiceHttpApiHostModule.Configure.cs @@ -1,5 +1,6 @@ using DotNetCore.CAP; using LINGYUN.Abp.ExceptionHandling; +using LINGYUN.Abp.Localization.CultureMap; using LINGYUN.Abp.MessageService.Localization; using LINGYUN.Abp.Serilog.Enrichers.Application; using Microsoft.AspNetCore.Authentication.JwtBearer; @@ -231,6 +232,18 @@ namespace LINGYUN.Abp.MessageService 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/messages/LINGYUN.Abp.MessageService.HttpApi.Host/AbpMessageServiceHttpApiHostModule.cs b/aspnet-core/services/messages/LINGYUN.Abp.MessageService.HttpApi.Host/AbpMessageServiceHttpApiHostModule.cs index bde17b2e9..15ab5db2d 100644 --- a/aspnet-core/services/messages/LINGYUN.Abp.MessageService.HttpApi.Host/AbpMessageServiceHttpApiHostModule.cs +++ b/aspnet-core/services/messages/LINGYUN.Abp.MessageService.HttpApi.Host/AbpMessageServiceHttpApiHostModule.cs @@ -9,6 +9,7 @@ using LINGYUN.Abp.ExceptionHandling.Notifications; using LINGYUN.Abp.Hangfire.Storage.MySql; using LINGYUN.Abp.Identity.WeChat; using LINGYUN.Abp.IM.SignalR; +using LINGYUN.Abp.Localization.CultureMap; using LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore; using LINGYUN.Abp.MessageService.EntityFrameworkCore; using LINGYUN.Abp.MultiTenancy.DbFinder; @@ -64,6 +65,7 @@ namespace LINGYUN.Abp.MessageService typeof(AbpDbFinderMultiTenancyModule), typeof(AbpCachingStackExchangeRedisModule), typeof(AbpAspNetCoreHttpOverridesModule), + typeof(AbpLocalizationCultureMapModule), typeof(AbpAutofacModule) )] public partial class AbpMessageServiceHttpApiHostModule : AbpModule @@ -103,8 +105,6 @@ namespace LINGYUN.Abp.MessageService app.UseCorrelationId(); // 虚拟文件系统 app.UseStaticFiles(); - // 本地化 - app.UseAbpRequestLocalization(); //路由 app.UseRouting(); // 跨域 @@ -115,9 +115,12 @@ namespace LINGYUN.Abp.MessageService app.UseAbpClaimsMap(); // jwt app.UseJwtTokenMiddleware(); - app.UseAuthorization(); // 多租户 app.UseMultiTenancy(); + // 本地化 + app.UseMapRequestLocalization(); + // 授权 + app.UseAuthorization(); // Swagger app.UseSwagger(); // Swagger可视化界面 diff --git a/aspnet-core/services/messages/LINGYUN.Abp.MessageService.HttpApi.Host/LINGYUN.Abp.MessageService.HttpApi.Host.csproj b/aspnet-core/services/messages/LINGYUN.Abp.MessageService.HttpApi.Host/LINGYUN.Abp.MessageService.HttpApi.Host.csproj index 45c9c8c0f..063ca50d9 100644 --- a/aspnet-core/services/messages/LINGYUN.Abp.MessageService.HttpApi.Host/LINGYUN.Abp.MessageService.HttpApi.Host.csproj +++ b/aspnet-core/services/messages/LINGYUN.Abp.MessageService.HttpApi.Host/LINGYUN.Abp.MessageService.HttpApi.Host.csproj @@ -59,6 +59,7 @@ + diff --git a/aspnet-core/services/platform/LINGYUN.Platform.HttpApi.Host/AppPlatformHttpApiHostModule.Configure.cs b/aspnet-core/services/platform/LINGYUN.Platform.HttpApi.Host/AppPlatformHttpApiHostModule.Configure.cs index 9a8cd675c..6a9f660ab 100644 --- a/aspnet-core/services/platform/LINGYUN.Platform.HttpApi.Host/AppPlatformHttpApiHostModule.Configure.cs +++ b/aspnet-core/services/platform/LINGYUN.Platform.HttpApi.Host/AppPlatformHttpApiHostModule.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 Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.DataProtection; @@ -235,6 +236,18 @@ namespace LINGYUN.Platform 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/platform/LINGYUN.Platform.HttpApi.Host/AppPlatformHttpApiHostModule.cs b/aspnet-core/services/platform/LINGYUN.Platform.HttpApi.Host/AppPlatformHttpApiHostModule.cs index 8f4028887..d279c0322 100644 --- a/aspnet-core/services/platform/LINGYUN.Platform.HttpApi.Host/AppPlatformHttpApiHostModule.cs +++ b/aspnet-core/services/platform/LINGYUN.Platform.HttpApi.Host/AppPlatformHttpApiHostModule.cs @@ -4,6 +4,7 @@ using LINGYUN.Abp.Data.DbMigrator; using LINGYUN.Abp.EventBus.CAP; using LINGYUN.Abp.ExceptionHandling.Emailing; using LINGYUN.Abp.Features.LimitValidation.Redis; +using LINGYUN.Abp.Localization.CultureMap; using LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore; using LINGYUN.Abp.MultiTenancy.DbFinder; using LINGYUN.Abp.Notifications; @@ -69,6 +70,7 @@ namespace LINGYUN.Platform typeof(AbpDbFinderMultiTenancyModule), typeof(AbpCachingStackExchangeRedisModule), typeof(AbpAspNetCoreHttpOverridesModule), + typeof(AbpLocalizationCultureMapModule), typeof(AbpAutofacModule) )] public partial class AppPlatformHttpApiHostModule : AbpModule @@ -108,16 +110,16 @@ namespace LINGYUN.Platform app.UseCorrelationId(); // 虚拟文件系统 app.UseStaticFiles(); - // 本地化 - app.UseAbpRequestLocalization(); - // 多租户 - app.UseMultiTenancy(); //路由 app.UseRouting(); // 认证 app.UseAuthentication(); // jwt app.UseJwtTokenMiddleware(); + // 多租户 + app.UseMultiTenancy(); + // 本地化 + app.UseMapRequestLocalization(); // 授权 app.UseAuthorization(); // Swagger @@ -129,9 +131,8 @@ namespace LINGYUN.Platform }); // 审计日志 app.UseAuditing(); + // 记录请求信息 app.UseAbpSerilogEnrichers(); - // 工作单元 - app.UseUnitOfWork(); // 路由 app.UseConfiguredEndpoints(); diff --git a/aspnet-core/services/platform/LINGYUN.Platform.HttpApi.Host/LINGYUN.Platform.HttpApi.Host.csproj b/aspnet-core/services/platform/LINGYUN.Platform.HttpApi.Host/LINGYUN.Platform.HttpApi.Host.csproj index bfe9b2290..e62547c52 100644 --- a/aspnet-core/services/platform/LINGYUN.Platform.HttpApi.Host/LINGYUN.Platform.HttpApi.Host.csproj +++ b/aspnet-core/services/platform/LINGYUN.Platform.HttpApi.Host/LINGYUN.Platform.HttpApi.Host.csproj @@ -62,6 +62,7 @@ +