ASP.NET Core如何切换系统异常提示的显示语言?
配置不生效核心原因
- 异步代码(
await)执行后会切换线程,单独对当前线程设置的Culture不会自动同步到新线程,单次线程配置无法覆盖整个请求生命周期 - .NET Core默认不自带非英语的异常资源包,缺少对应语言的本地化资源自然只能返回英文
可行实现方案
前置要求
- 服务器上必须安装和你运行时版本完全匹配的对应语言.NET Core 运行时语言包,例如你用ASP.NET Core 3.1就安装3.1版本的法语、葡萄牙语语言包,这是系统层面的前提
- 如果采用独立部署(Self-Contained)模式发布项目,需要在项目文件
.csproj的<PropertyGroup>节点中添加配置,避免资源被裁剪:
<SatelliteResourceLanguages>fr;pt</SatelliteResourceLanguages>
项目配置步骤
- 3.1及以上版本ASP.NET Core默认已自带本地化组件,无需额外安装NuGet包
- 在
Startup.cs(.NET 6+ 是Program.cs)中配置请求本地化服务:
// ConfigureServices 方法中添加 services.Configure<RequestLocalizationOptions>(options => { // 声明所有支持的语言 var supportedCultures = new List<CultureInfo> { new CultureInfo("en-US"), new CultureInfo("fr-FR"), new CultureInfo("pt-PT") }; options.DefaultRequestCulture = new RequestCulture("fr-FR"); options.SupportedCultures = supportedCultures; options.SupportedUICultures = supportedCultures; });
- 启用本地化中间件,必须放在所有其他中间件之前,确保整个请求生命周期的文化都生效:
// Configure 方法最开头添加 app.UseRequestLocalization();
动态切换语言
如果需要根据请求动态切换语言,可以直接使用中间件默认支持的切换规则,通过以下任意一种方式指定:
- 查询参数:请求地址加
?culture=fr-FR&ui-culture=fr-FR - 请求头:添加
Accept-Language: fr-FR - 自定义Cookie:格式符合框架要求即可
注意:部分.NET基础库或第三方依赖如果本身没有提供对应语言的本地化资源,即便完成以上配置也会返回英文异常,这种情况需要自行对异常做捕获翻译处理。
内容的提问来源于stack exchange,提问作者Gordon Khanh Ng.
相关产品推荐
相关产品推荐

