.NET Core MVC RequestLocalization忽略DefaultRequestCulture

我通过以下方法为es-ES实现了具有单个MVC视图的RequestLocalization(注意:此代码仅压缩到最相关的部分):

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    services.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix,opts =>
                                     {
                                         opts.ResourcesPath = "Resources";
                                     });
}


public void Configure(IApplicationBuilder app,IHostingEnvironment env,ILoggerFactory loggerFactory)
{
     var english = "en-US";
     var englishRequestCulture = new RequestCulture(culture: english,uiCulture: english);
     var supportedCultures = new List<CultureInfo>
                         {
                             new CultureInfo("en-US"),new CultureInfo("es-ES")
                         };

     var options = new RequestLocalizationoptions
            {
                DefaultRequestCulture = englishRequestCulture,SupportedCultures = supportedCultures,SupportedUICultures = supportedCultures
            };

     app.UseRequestLocalization(options);
     app.UseMvc();
}

当将culture = en-US或culture = es-ES作为查询字符串参数传递时,这非常有效.我的期望是,当没有提供文化时,认文化应该是en-US.但是,当我不提供culture参数时,我的视图认为es-ES.我已确认所有其他本地化提供商也认为en-US.

我还应该注意到,我尝试通过ConfigureServices()进行本地化,但是根本无法使其正常运行:

services.Configure<RequestLocalizationoptions>(
             options =>
             {
                 var supportedCultures = new List<CultureInfo>
                     {
                         new CultureInfo("en-US"),new CultureInfo("es-ES")
                     };

                 options.DefaultRequestCulture = new RequestCulture(culture: "en-US",uiCulture: "en-US");
                 options.SupportedCultures = supportedCultures;
                 options.SupportedUICultures = supportedCultures;
             });

解决方法

我自己也有同样的问题.看看你的HTTP请求!它们是否包含设置为es-ES(或任何内容)的Accept-Language标头?然后你的本地化中间件工作正常.三个认的RequestCultureProviders之一,即AcceptLanguageHeaderRequestCultureProvider,尝试通过执行您所做的操作来确定文化 – 查找Accept-Language标头.

所以不,正如您和之前的回答所建议的那样,本地化中间件不会忽略DefaultRequestCulture.

相关文章

本文将从上往下,循序渐进的介绍一系列相关.NET的概念,先从...
基于 .NET 的一个全新的、好用的 PHP SDK + Runtime: Pe...
.NET 异步工作原理介绍。
引子 .NET 6 开始初步引入 PGO。PGO 即 Profile Guided Opti...
前言 2021/4/8 .NET 6 Preview 3 发布,这个版本的改进大多来...
前言 开头防杠:.NET 的基础库、语言、运行时团队从来都是相...