微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

.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.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐