加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

无法使用ASP.NET 5进行基本本地化

发布时间:2020-12-16 06:39:39 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试本地化我的ASP.NET 5 / MVC 6(RC1)项目.不幸的是官方文档仍然缺失所以我的实验主要基于 this和 this博客文章. 这就是我所做的:在Configure(Startup.cs)中我有 app.UseRequestLocalization(new RequestLocalizationOptions{ RequestCultureProvide
我正在尝试本地化我的ASP.NET 5 / MVC 6(RC1)项目.不幸的是官方文档仍然缺失所以我的实验主要基于 this和 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列表中的第一个条目始终返回de-CH文化.所以我希望AcceptLanguageHeaderRequestCultureProvider以及默认的RequestCulture(en-US)没有影响力.

但是,当我看到

HttpContext.Features.Get<IRequestCultureFeature>().RequestCulture.Culture.Name;

在一些控制器动作中,它的值是en-US而不是预期的de-CH.

然后我尝试将配置中的默认RequestCulture从en-US更改为de-DE,现在我查看

HttpContext.Features.Get<IRequestCultureFeature>().RequestCulture.Culture.Name;

在我的控制器动作中,它具有de-DE值.

所以问题是:为什么ASP.NET会回归到默认文化而不是使用我的CustomRequestCultureProvider提供的文化de-CH?

解决方法

您似乎还必须在支持的文化列表中包含“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);
    });
}

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 };

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读