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

ASP.NET Core中设置fr-FR为默认区域性无效,如何解决?

问题描述

我尝试将ASP.NET Core应用的默认区域性修改为fr-FR,已在Program.cs中配置相关代码,但默认区域性仍为en-US,其中options.DefaultRequestCulture = new RequestCulture(culture: "fr-FR", uiCulture: "fr-FR");这段代码似乎被忽略,请求协助解决。

相关配置代码:

builder.Services.Configure<RequestLocalizationOptions>(options =>
{
    var supportedCultures = new List<CultureInfo> {
        new CultureInfo("fr-FR"),
        new CultureInfo("en-US"),

    };
    options.DefaultRequestCulture = new RequestCulture(culture: "fr-FR", uiCulture: "fr-FR");
    options.SupportedCultures = supportedCultures;
    options.SupportedUICultures = supportedCultures;
    options.RequestCultureProviders.Insert(0, new QueryStringRequestCultureProvider());
});

builder.Services.AddRazorPages();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();

app.UseRequestLocalization(app.Services.GetRequiredService<IOptions<RequestLocalizationOptions>>().Value);

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

被忽略的代码片段:

options.DefaultRequestCulture = new RequestCulture(culture: "fr-FR", uiCulture: "fr-FR");

排查与解决步骤

1. 调整请求文化提供程序优先级

你将QueryStringRequestCultureProvider插入到了提供列表首位,但默认情况下,AcceptLanguageHeaderRequestCultureProvider会读取浏览器发送的Accept-Language头,优先于你设置的默认值。可以移除多余的提供程序,确保只有查询字符串提供程序和默认值生效:

options.RequestCultureProviders = new List<IRequestCultureProvider>
{
    new QueryStringRequestCultureProvider()
};

这样当URL中未指定文化参数时,就会使用你设置的fr-FR默认值。

2. 简化UseRequestLocalization调用

当前代码手动获取IOptions<RequestLocalizationOptions>的值,可能存在配置读取问题。改用框架的重载方法,让系统自动注入配置:

// 替换原有的手动获取配置代码
app.UseRequestLocalization();

3. 强制设置线程默认区域性

服务器或系统的默认区域性可能会覆盖应用配置,在应用启动时添加线程文化设置:

var app = builder.Build();

// 添加这两行代码
var cultureInfo = new CultureInfo("fr-FR");
CultureInfo.DefaultThreadCurrentCulture = cultureInfo;
CultureInfo.DefaultThreadCurrentUICulture = cultureInfo;

// 后续中间件配置...

4. 验证区域性生效状态

在Razor页面中添加验证代码,确认当前文化值:

<p>当前区域性:@System.Globalization.CultureInfo.CurrentCulture.Name</p>
<p>当前UI区域性:@System.Globalization.CultureInfo.CurrentUICulture.Name</p>

测试两种场景:

  • 直接访问页面,检查是否显示fr-FR
  • 访问带参数的URL(如?culture=en-US),确认能切换到英文,验证提供程序功能正常

内容的提问来源于Stack Exchange,提问作者Raymond Morphy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 13:45:21