在 Blazor webassembly / 客户端应用程序中获取浏览器文化的更好方法
Better way to get browser culture in Blazor webassembly / client app
我知道如何使用 HTTPContext 和 IRequestCultureFeature 获取 Blazor 服务器应用程序的当前文化信息。在 Blazor webassembly (wasm) / 客户端应用程序中有没有更好的方法来获取当前的浏览器文化?
目前,客户端大小的 Blazor 无法获取文化数据,因为 webassembly 上的单声道未实现它(尚未 - 在 github 上进行了跟踪)。
据我所知,最好的选择是使用 javascript 找到它,然后使用 JsInterop
.
将其发送到 Blazor
像这样的东西可以帮助你开始,在脚本标签的索引页面中:
window.getCulture = function () {
return (navigator.languages && navigator.languages.length) ? navigator.languages[0] :
navigator.userLanguage || navigator.language || navigator.browserLanguage || 'en';
}
然后在 Blazor 中:
@page "/"
@inject IJSRuntime JSRuntime
@code{
protected override async Task OnInitializedAsync()
{
var browserLocale = await JSRuntime.InvokeAsync<string>("getCulture");
Console.WriteLine(browserLocale);
}
}
然后检查控制台 window,您将看到打印的区域性。
编辑:实际上有人为此做了一个开源包,可能更容易使用:
https://github.com/Blazored/Localisation
https://www.nuget.org/packages/Blazored.Localisation/
编辑 2:Blazored.Localisation 已弃用,您可以改用 Blazored.LocalStorage:
https://github.com/Blazored/LocalStorage
https://www.nuget.org/packages/Blazored.LocalStorage/
您可以使用 JSInterop 请求浏览器语言:
window.browserJsFunctions = {
getLanguage: () => {
return navigator.language || navigator.userLanguage;
},
getBrowserTimeZoneOffset: () => {
return new Date().getTimezoneOffset();
},
getBrowserTimeZoneIdentifier: () => {
return Intl.DateTimeFormat().resolvedOptions().timeZone;
},
};
@inject IJSRuntime _jsRuntime
@code {
string _cultureName;
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
_cultureName = await _jsRuntime.InvokeAsync<string>("browserJsFunctions.getLanguage");
}
}
}
我知道如何使用 HTTPContext 和 IRequestCultureFeature 获取 Blazor 服务器应用程序的当前文化信息。在 Blazor webassembly (wasm) / 客户端应用程序中有没有更好的方法来获取当前的浏览器文化?
目前,客户端大小的 Blazor 无法获取文化数据,因为 webassembly 上的单声道未实现它(尚未 - 在 github 上进行了跟踪)。
据我所知,最好的选择是使用 javascript 找到它,然后使用 JsInterop
.
像这样的东西可以帮助你开始,在脚本标签的索引页面中:
window.getCulture = function () {
return (navigator.languages && navigator.languages.length) ? navigator.languages[0] :
navigator.userLanguage || navigator.language || navigator.browserLanguage || 'en';
}
然后在 Blazor 中:
@page "/"
@inject IJSRuntime JSRuntime
@code{
protected override async Task OnInitializedAsync()
{
var browserLocale = await JSRuntime.InvokeAsync<string>("getCulture");
Console.WriteLine(browserLocale);
}
}
然后检查控制台 window,您将看到打印的区域性。
编辑:实际上有人为此做了一个开源包,可能更容易使用:
https://github.com/Blazored/Localisation
https://www.nuget.org/packages/Blazored.Localisation/
编辑 2:Blazored.Localisation 已弃用,您可以改用 Blazored.LocalStorage:
https://github.com/Blazored/LocalStorage
https://www.nuget.org/packages/Blazored.LocalStorage/
您可以使用 JSInterop 请求浏览器语言:
window.browserJsFunctions = {
getLanguage: () => {
return navigator.language || navigator.userLanguage;
},
getBrowserTimeZoneOffset: () => {
return new Date().getTimezoneOffset();
},
getBrowserTimeZoneIdentifier: () => {
return Intl.DateTimeFormat().resolvedOptions().timeZone;
},
};
@inject IJSRuntime _jsRuntime
@code {
string _cultureName;
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
_cultureName = await _jsRuntime.InvokeAsync<string>("browserJsFunctions.getLanguage");
}
}
}