在Blazor Webassembly /客户端应用中获得浏览器文化的更好方法

问题描述 投票:0回答:2

我知道如何通过将HTTPContext与IRequestCultureFeature结合使用来获取Blazor服务器应用程序的当前区域性信息。在Blazor Webassembly(wasm)/客户端应用程序中,还有什么更好的方法来获取当前的浏览器文化?

blazor cultureinfo webassembly blazor-client-side currentculture
2个回答
0
投票

当前客户端大小的Blazor无法获取文化数据,因为webassembly上的mono尚未实现(但是-在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);
    }
}

然后检查控制台窗口,您将看到打印的区域性。

编辑:实际上有人为此制作了一个开源软件包,可能更易于使用:https://github.com/Blazored/Localisationhttps://www.nuget.org/packages/Blazored.Localisation/


0
投票

您可以使用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");
            }
        }
}
© www.soinside.com 2019 - 2024. All rights reserved.