无法使用基本本地化 ASP.NET 5
Cannot get basic localization to work with ASP.NET 5
我正在尝试本地化我的 ASP.NET 5 / MVC 6 (RC1) 项目。不幸的是,官方文档仍然缺失,所以我的实验主要基于 this and this 博客文章。
这是我所做的:在 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"));
请注意,我的 RequestCultureProviders
列表中的第一个条目总是 returns de-CH
文化。所以我希望 AcceptLanguageHeaderRequestCultureProvider
以及默认的 RequestCulture
(en-US
) 没有影响。
然而当我看到
HttpContext.Features.Get<IRequestCultureFeature>().RequestCulture.Culture.Name;
在某些控制器操作中,它的值为 en-US
而不是预期的 de-CH
。
然后我尝试将 Configure
中的默认值 RequestCulture
从 en-US
更改为 de-DE
现在当我查看
HttpContext.Features.Get<IRequestCultureFeature>().RequestCulture.Culture.Name;
在我的控制器操作中,它的值为 de-DE
。
所以问题是:为什么ASP.NET退回到默认文化而不是使用我的[=28=提供的文化de-CH
]?
看来您还必须在支持的文化列表中包括 "de-CH"。比如下面的returns"de-CH"作为culture,但是如果我注释掉lines设置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);
});
}
SupportedCultures
属性 的描述说值 null
表示支持所有文化并且 null
是默认值,但测试表明并非如此,因为source:
/// <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 };
我正在尝试本地化我的 ASP.NET 5 / MVC 6 (RC1) 项目。不幸的是,官方文档仍然缺失,所以我的实验主要基于 this and this 博客文章。
这是我所做的:在 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"));
请注意,我的 RequestCultureProviders
列表中的第一个条目总是 returns de-CH
文化。所以我希望 AcceptLanguageHeaderRequestCultureProvider
以及默认的 RequestCulture
(en-US
) 没有影响。
然而当我看到
HttpContext.Features.Get<IRequestCultureFeature>().RequestCulture.Culture.Name;
在某些控制器操作中,它的值为 en-US
而不是预期的 de-CH
。
然后我尝试将 Configure
中的默认值 RequestCulture
从 en-US
更改为 de-DE
现在当我查看
HttpContext.Features.Get<IRequestCultureFeature>().RequestCulture.Culture.Name;
在我的控制器操作中,它的值为 de-DE
。
所以问题是:为什么ASP.NET退回到默认文化而不是使用我的[=28=提供的文化de-CH
]?
看来您还必须在支持的文化列表中包括 "de-CH"。比如下面的returns"de-CH"作为culture,但是如果我注释掉lines设置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);
});
}
SupportedCultures
属性 的描述说值 null
表示支持所有文化并且 null
是默认值,但测试表明并非如此,因为source:
/// <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 };