2

我尝试根据客户端浏览器选择的语言显示和使用正确的数字分隔符。我正在使用 Blazor 服务器应用程序。我尝试使用“Sytem.Globalization”命名空间,但这仅显示服务器端浏览器的设置。有没有办法获取客户端浏览器语言/文化设置?

4

2 回答 2

1

您可以通过 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 代替。

于 2020-08-13T22:57:45.130 回答
-1

我终于找到了。有一件事是肯定的:不要使用 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)。如果你有这个,你也可以获得日期格式。等等等等

于 2020-08-14T04:41:11.257 回答