我尝试根据客户端浏览器选择的语言显示和使用正确的数字分隔符。我正在使用 Blazor 服务器应用程序。我尝试使用“Sytem.Globalization”命名空间,但这仅显示服务器端浏览器的设置。有没有办法获取客户端浏览器语言/文化设置?
2 回答
您可以通过 Interop 使用 javascripts navigator.language 属性。
https://developer.mozilla.org/en-US/docs/Web/API/NavigatorLanguage/languages
public static class JsInterop
{
public static async Task<string[]> Languages()
{
return await JSRuntime.Current.InvokeAsync<string[]>("navigatorLanguages");
}
}
将此添加到您的 javascript 文件中
navigatorLanguages = function () {
return Promise.resolve(navigator.languages);
};
这将返回用户首选语言的字符串数组。
注意:如果您需要支持 IE10 或更早版本,则需要使用 navigator.browserLanguage 代替。
我终于找到了。有一件事是肯定的:不要使用 CurrentCulture 或 System.Globalization 之类的东西来获取客户端浏览器语言设置。您必须在加载任何 Razor 组件之前获取此值,因此我使用 _Host.cshtml 文件来获取 (Mvc.RazorPages.PageBase.) HttpContext。从那里我使用了来自 HttpContext.Request.Headers StringValues 的“Accept-Language”,在我的情况下返回:“nl,en-GB;q=0.9,en;q=0.8”。结果证明是正确的,nl(荷兰语)是第一种浏览器语言,其次是英语。现在您可以使用 CultureInfo:varculture = new System.Globalization.CultureInfo("en-GB")。获取小数分隔符:char numberDecimalSeparator = Convert.ToChar(culture.NumberFormat.NumberDecimalSeparator)。如果你有这个,你也可以获得日期格式。等等等等