ASP.为什么我们需要指定一个支持的区域性列表?



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

我发现了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,请求来到我的ASP。Thread.CurrentCulture属性下的。NET核心控制器

我的问题是,如何接受所有文化?为什么我们需要提供一个"支持"列表?的吗?

我知道本地化字典只在您的项目中翻译特定的文化列表。但如果没有,它就会回归到英语。接受所有文化仍然有助于DateTime.ToString()和数字格式等情况。

是否有一种简单的方法可以自动接受所有区域性(就像以前的ASP一样)?Core之前的。NET版本)?

这是我能做的最好的,使用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");
});

我的问题是,如何接受所有的文化?为什么我们需要提供一个"支持"列表?的吗?

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

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

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

最新更新