You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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.Cultures NuGet包获取特定区域性数据,或使用<InvariantGlobalization>false</InvariantGlobalization>让运行时依赖系统的全球化库。

内容的提问来源于stack exchange,提问作者Suchishma Tata

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 10:30:56