You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor WASM启动时如何读取ASP.NET Culture Cookie?

Blazor WASM 没有提供类似Blazor Server的UseRequestLocalization中间件来自动读取文化Cookie,但可以借助框架内置的CookieRequestCultureProvider类结合JS互操作实现,具体步骤如下:

1. 编写JS方法读取Cookie

在wwwroot/js目录下创建cookieUtils.js文件,添加读取Cookie的方法:

window.getCookie = function(name) {
    let cookieValue = null;
    if (document.cookie && document.cookie !== '') {
        const cookies = document.cookie.split(';');
        for (let i = 0; i < cookies.length; i++) {
            const cookie = cookies[i].trim();
            if (cookie.startsWith(name + '=')) {
                cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                break;
            }
        }
    }
    return cookieValue;
};

在index.html中引入该脚本:

<script src="js/cookieUtils.js"></script>

2. 解析Cookie并设置线程文化

方案一:在Program.cs初始化时设置

在程序启动阶段读取Cookie并设置默认文化,确保所有组件初始化前文化已生效:

using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using Microsoft.AspNetCore.Localization;
using System.Globalization;

var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("#app");

var host = builder.Build();
var jsRuntime = host.Services.GetRequiredService<IJSRuntime>();
var cultureCookie = await jsRuntime.InvokeAsync<string>("getCookie", CookieRequestCultureProvider.DefaultCookieName);

if (!string.IsNullOrEmpty(cultureCookie))
{
    var requestCulture = CookieRequestCultureProvider.ParseCookieValue(cultureCookie);
    if (requestCulture != null)
    {
        CultureInfo.DefaultThreadCurrentCulture = requestCulture.Culture;
        CultureInfo.DefaultThreadCurrentUICulture = requestCulture.UICulture;
    }
}

await host.RunAsync();

方案二:在根组件中设置

如果需要在组件初始化后处理,可在App.razor的生命周期方法中执行:

@inject IJSRuntime JS
@using Microsoft.AspNetCore.Localization
@using System.Globalization

@code {
    protected override async Task OnInitializedAsync()
    {
        var cultureCookie = await JS.InvokeAsync<string>("getCookie", CookieRequestCultureProvider.DefaultCookieName);
        
        if (!string.IsNullOrEmpty(cultureCookie))
        {
            var requestCulture = CookieRequestCultureProvider.ParseCookieValue(cultureCookie);
            if (requestCulture != null)
            {
                CultureInfo.DefaultThreadCurrentCulture = requestCulture.Culture;
                CultureInfo.DefaultThreadCurrentUICulture = requestCulture.UICulture;
                StateHasChanged(); // 刷新组件应用文化变更
            }
        }
    }
}

3. 验证本地化

确保项目已配置本地化资源文件(如Resources/App.resx、Resources/App.zh-CN.resx),通过IStringLocalizer使用本地化文本:

@inject IStringLocalizer<App> Localizer

<h1>@Localizer["Welcome"]</h1>

说明

Blazor WASM 没有内置的自动读取文化Cookie的中间件,但CookieRequestCultureProvider是官方本地化组件的一部分,可用于解析Cookie格式的文化值,结合JS互操作读取浏览器Cookie即可实现与Blazor Server一致的文化切换效果。

内容的提问来源于stack exchange,提问作者buga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 05:50:20