我的目标是使用浏览器语言作为控制器/视图中使用的区域性。
我发现了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文件中,如果想要准确翻译,每个单词都需要匹配。如果你想支持所有的语言,这将需要大量的工作。据估计,如果你想准确地翻译,你需要会说各种语言。
类推,谷歌翻译有时会有不准确的翻译吗?这可能是由于不熟悉某些特殊语言的用法造成的。