我正在尝试本地化我的ASP.NET 5/MVC 6(RC1)项目.不幸的是官方文档仍然缺失,所以我的实验主要基于这个和这个博客文章.
这是我做的:在Configure
(Startup.cs)我有
app.UseRequestLocalization(new RequestLocalizationOptions { RequestCultureProviders = new List{ new CustomRequestCultureProvider(httpContext => Task.FromResult(new ProviderCultureResult("de-CH"))), new AcceptLanguageHeaderRequestCultureProvider() } }, new RequestCulture("en-US"));
请注意,RequestCultureProviders
列表中的第一个条目始终返回de-CH
文化.所以我希望AcceptLanguageHeaderRequestCultureProvider
默认RequestCulture
(en-US
)以及默认()都没有影响力.
但是,当我看到
HttpContext.Features.Get().RequestCulture.Culture.Name;
在一些控制器动作中,它的值是en-US
而不是预期的de-CH
.
然后我试图更改默认RequestCulture
的Configure
从en-US
到de-DE
现在,当我看着
HttpContext.Features.Get().RequestCulture.Culture.Name;
在我的控制器动作中,它具有值de-DE
.
所以问题是:为什么ASP.NET会回归到默认文化而不是使用de-CH
我提供的文化CustomRequestCultureProvider
?
您似乎还必须在支持的文化列表中包含"de-CH".例如,以下内容返回"de-CH"作为文化,但如果我注释掉行设置SupportedCultures
,则显示"en-US".在MVC应用程序中,您可能还必须进行设置SupportedUICultures
.
public void Configure(IApplicationBuilder app) { app.UseIISPlatformHandler(); var requestLocalizationOptions = new RequestLocalizationOptions { SupportedCultures = new List{ new CultureInfo("en-US"), new CultureInfo("de-CH") }, RequestCultureProviders = new List { new CustomRequestCultureProvider(httpContext => Task.FromResult(new ProviderCultureResult("de-CH"))), new AcceptLanguageHeaderRequestCultureProvider() } }; app.UseRequestLocalization(requestLocalizationOptions, new RequestCulture("en-US")); app.Run(async (context) => { var envName = context.Features.Get ().RequestCulture.Culture.Name; await context.Response.WriteAsync("Hello World! " + envName); }); }
该SupportedCultures
属性的描述表示值null
表示支持所有文化,这null
是默认值,但测试表明不然,源代码如下:
////// The cultures supported by the application. The public IListwill only set /// the current request culture to an entry in this list. /// Defaults to . /// SupportedCultures { get; set; } = new List { CultureInfo.CurrentCulture };