无法使用基本本地化 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 中的默认值 RequestCultureen-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 };