.NET 4与.NET 6应用获取系统支持区域性差异及自动配置方案问询
解决方案
1. 让.NET 6返回与.NET 4相同的全量区域性
.NET 6(及.NET Core系列)默认仅加载核心区域性集合,而.NET Framework(.NET 4)会包含系统支持的所有区域性。要让.NET 6获取完整的区域性列表,只需修改项目配置:
在你的.NET 6项目的.csproj文件中添加以下配置,禁用全球化不变模式:
<PropertyGroup> <InvariantGlobalization>false</InvariantGlobalization> </PropertyGroup>
该设置会让.NET运行时直接使用Windows系统的区域性数据库(同一机器上与.NET 4共享的数据源),此时再调用CultureInfo.GetCultures(CultureTypes.AllCultures)就能得到和.NET 4一致的结果。
2. 自动将所有机器支持的区域性添加到RequestLocalizationOptions
无需手动维护配置文件,直接在Program.cs中通过代码动态获取并添加所有区域性:
var builder = WebApplication.CreateBuilder(args); // 配置本地化选项 builder.Services.Configure<RequestLocalizationOptions>(options => { // 获取所有非不变模式的区域性,转换为名称数组 var supportedCultures = CultureInfo.GetCultures(CultureTypes.AllCultures) .Where(culture => !culture.Equals(CultureInfo.InvariantCulture)) .Select(culture => culture.Name) .ToArray(); // 添加支持的区域性和UI区域性 options.AddSupportedCultures(supportedCultures); options.AddSupportedUICultures(supportedCultures); // 设置默认区域性(可根据需求修改,比如使用系统默认) options.SetDefaultCulture(CultureInfo.CurrentCulture.Name); }); var app = builder.Build(); // 启用本地化中间件(需放在路由中间件之前) app.UseRequestLocalization(); // 其他中间件配置... app.Run();
补充说明
CultureTypes.AllCultures会返回所有类型的区域性(中性区域性、特定区域性等),如果只需要特定区域性,可将参数改为CultureTypes.SpecificCultures。- 若你的应用部署到非Windows系统,需确保运行时包含完整的全球化数据,可通过安装
System.Globalization.CulturesNuGet包获取特定区域性数据,或使用<InvariantGlobalization>false</InvariantGlobalization>让运行时依赖系统的全球化库。
内容的提问来源于stack exchange,提问作者Suchishma Tata
相关产品推荐
相关产品推荐

