Rob*_*ner 4 localization asp.net-core-mvc asp.net-core
我正在尝试本地化我的ASP.NET 5/MVC 6(RC1)项目.不幸的是官方文档仍然缺失,所以我的实验主要基于这个和这个博客文章.
这是我做的:在Configure
(Startup.cs)我有
app.UseRequestLocalization(new RequestLocalizationOptions
{
RequestCultureProviders = new List<IRequestCultureProvider>
{
new CustomRequestCultureProvider(httpContext => Task.FromResult(new ProviderCultureResult("de-CH"))),
new AcceptLanguageHeaderRequestCultureProvider()
}
}, new RequestCulture("en-US"));
Run Code Online (Sandbox Code Playgroud)
请注意,RequestCultureProviders
列表中的第一个条目始终返回de-CH
文化.所以我希望AcceptLanguageHeaderRequestCultureProvider
默认RequestCulture
(en-US
)以及默认()都没有影响力.
但是,当我看到
HttpContext.Features.Get<IRequestCultureFeature>().RequestCulture.Culture.Name;
Run Code Online (Sandbox Code Playgroud)
在一些控制器动作中,它的值是en-US
而不是预期的de-CH
.
然后我试图更改默认RequestCulture
的Configure
从en-US
到de-DE
现在,当我看着
HttpContext.Features.Get<IRequestCultureFeature>().RequestCulture.Culture.Name;
Run Code Online (Sandbox Code Playgroud)
在我的控制器动作中,它具有值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<CultureInfo>
{
new CultureInfo("en-US"),
new CultureInfo("de-CH")
},
RequestCultureProviders = new List<IRequestCultureProvider>
{
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<IRequestCultureFeature>().RequestCulture.Culture.Name;
await context.Response.WriteAsync("Hello World! " + envName);
});
}
Run Code Online (Sandbox Code Playgroud)
该SupportedCultures
属性的描述表示值null
表示支持所有文化,这null
是默认值,但测试表明不然,源代码如下:
/// <summary>
/// The cultures supported by the application. The <see cref="RequestLocalizationMiddleware"/> will only set
/// the current request culture to an entry in this list.
/// Defaults to <see cref="CultureInfo.CurrentCulture"/>.
/// </summary>
public IList<CultureInfo> SupportedCultures { get; set; } = new List<CultureInfo> { CultureInfo.CurrentCulture };
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1430 次 |
最近记录: |