【问题标题】:ASP.NET Core : UseRequestLocalization why do we need to specify a list of supported cultures?ASP.NET Core:UseRequestLocalization 为什么我们需要指定支持的文化列表?
【发布时间】:2021-09-07 22:41:39
【问题描述】:

我的目标是使用浏览器语言作为我的控制器/视图中使用的文化。

我发现了app.UseRequestLocalization(),但它本身不起作用,它只接受当前的服务器文化。它需要选项来添加支持的文化列表才能工作:

app.UseRequestLocalization(options =>
{
    var supportedCultures = new string[] { "en-US", "en-CA", "fr-CA", "fr-FR" };
    options.AddSupportedCultures(supportedCultures)
        .AddSupportedUICultures(supportedCultures)
        .SetDefaultCulture("en-US");
});

这样,我的浏览器在accept-language 标头中发送fr-FR,并且请求在Thread.CurrentCulture 属性下正确地到达我的ASP.NET Core 控制器。

我的问题是,如何接受所​​有文化?为什么我们需要提供“支持”列表?

我了解本地化词典仅在您的项目中针对特定文化列表进行翻译。但是当它没有时,它无论如何都会回到英语。对于 DateTime.ToString() 和数字格式等情况,接受所有文化仍然会有所帮助。

是否有一种简单的方法可以自动接受所有文化(就像在 Core 之前的以前的 ASP.NET 版本中一样)?

【问题讨论】:

    标签: c# asp.net-core culture


    【解决方案1】:

    这是我能做的最好的事情,使用CultureInfo.GetCultures() 将它们全部列出。

    如果有人有理由说明我为什么不应该这样做(性能下降?),或者更好的选择,请随时发布另一个答案!

    app.UseRequestLocalization(options =>
    {
        var cinfo = CultureInfo.GetCultures(CultureTypes.AllCultures & ~CultureTypes.NeutralCultures);
        var supportedCultures = cinfo.Select(t => t.Name).Distinct().ToArray();
        options.AddSupportedCultures(supportedCultures)
            .AddSupportedUICultures(supportedCultures)
            .SetDefaultCulture("en-US");
    });
    

    【讨论】:

      【解决方案2】:

      我的问题是,如何接受所​​有文化?为什么我们需要提供“支持”列表?

      我认为不应该有你提到的这样的方法或库。通常,在 .net core 中,为客户群体使用的语言添加了 Name-Value。

      根据官方文档,我们可以看到.resx文件中,如果要准确翻译,每个单词都需要匹配。如果要支持所有语言,将需要大量工作。估计要翻译准确,需要会说各种语言。

      以此类推,谷歌翻译有时会出现不准确的翻译吗?可能是对某些特殊语言的用法不熟悉造成的。

      【讨论】:

      • 正如我在问题中解释的那样,这不是要翻译每种语言的应用程序资源字符串。这是关于利用日期、时间、数字、单位等框架类型的区域输出。在 .NET 应用程序(控制台/winforms/等)中,通过 ToString() 以这种方式打印它们是标准的。
      • 更多理由:在获得优势的框架基本类型之外,我有一个类使用 RegionInfo.IsMetric() 来确定在这种文化中速度单位是 km/h 还是 mph。 “en-US”和“en-CA”返回不同的结果。在支持的列表中仅添加“en”会阻止此功能可用,但同时添加两者都可以。
      猜你喜欢
      • 2020-03-25
      • 1970-01-01
      • 1970-01-01
      • 2014-01-21
      • 1970-01-01
      • 1970-01-01
      • 2019-06-09
      • 1970-01-01
      • 2016-11-18
      相关资源
      最近更新 更多