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

如何在Blazor 8静态服务器渲染中配置本地化?新手求助

Blazor 8 静态服务器渲染(SSR)本地化实现指南

1. 配置本地化服务(Program.cs)

首先在项目入口配置本地化服务与请求文化规则,确保中间件顺序正确:

var builder = WebApplication.CreateBuilder(args);

// 注册本地化服务,指定资源文件存放目录
builder.Services.AddLocalization(options => options.ResourcesPath = "Resources");

// 配置请求本地化参数
builder.Services.Configure<RequestLocalizationOptions>(options =>
{
    // 定义支持的文化列表
    var supportedCultures = new[]
    {
        new CultureInfo("en-US"),
        new CultureInfo("zh-CN"),
        new CultureInfo("zh-TW")
    };

    // 设置默认文化
    options.DefaultRequestCulture = new RequestCulture("zh-CN");
    options.SupportedCultures = supportedCultures;
    options.SupportedUICultures = supportedCultures;

    // 配置文化优先级:QueryString > Cookie > 浏览器默认语言
    options.RequestCultureProviders = new List<IRequestCultureProvider>
    {
        new QueryStringRequestCultureProvider(),
        new CookieRequestCultureProvider(),
        new AcceptLanguageHeaderRequestCultureProvider()
    };
});

// 注册Blazor SSR服务
builder.Services.AddRazorComponents();

var app = builder.Build();

// 启用本地化中间件(必须放在路由配置之前)
app.UseRequestLocalization();

app.UseStaticFiles();
app.UseAntiforgery();

app.MapRazorComponents<App>();

app.Run();

2. 创建本地化资源文件

  • 在项目根目录新建Resources文件夹
  • 添加全局资源文件:Shared.resx(默认文化,如中文)、Shared.en-US.resx(英文)、Shared.zh-TW.resx(繁体中文)
  • 若需组件专属本地化,可创建对应命名的资源文件,比如Pages.Index.resx对应Pages/Index.razor的文本

注意:资源文件的访问修饰符需设置为public(右键资源文件→属性→自定义工具命名空间→确保可见性为public)

3. 在SSR组件中使用本地化

全局资源调用

注入IStringLocalizer<Shared>(对应全局资源文件)直接使用:

@inject IStringLocalizer<Shared> Localizer

<h1>@Localizer["WelcomeMessage"]</h1>
<p>@Localizer["AppDescription"]</p>

组件专属资源调用

注入与组件同名的IStringLocalizer,调用对应资源文件的文本:

@inject IStringLocalizer<Index> Localizer

<p>@Localizer["PageTitle"]</p>

4. 实现文化切换功能

SSR为静态渲染,切换文化需触发页面刷新,推荐两种实现方式:

方式1:QueryString临时切换

通过链接携带文化参数,直接触发文化切换:

<div class="culture-switch">
    <a href="?culture=en-US&ui-culture=en-US">English</a>
    <a href="?culture=zh-CN&ui-culture=zh-CN">简体中文</a>
    <a href="?culture=zh-TW&ui-culture=zh-TW">繁体中文</a>
</div>

方式2:Cookie持久化切换

通过表单提交到后端端点,设置文化Cookie后重定向回原页面:

后端端点(Program.cs)

app.MapPost("/set-culture", async (HttpContext context, string culture) =>
{
    if (!string.IsNullOrEmpty(culture) && CultureInfo.GetCultures(CultureTypes.AllCultures).Any(c => c.Name == culture))
    {
        context.Response.Cookies.Append(
            CookieRequestCultureProvider.DefaultCookieName,
            CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)),
            new CookieOptions { Expires = DateTimeOffset.UtcNow.AddDays(30), HttpOnly = true }
        );
    }

    return Results.Redirect(context.Request.Headers.Referer.ToString() ?? "/");
});

前端表单(组件中)

<form method="post" action="/set-culture">
    <select name="culture" onchange="this.form.submit()">
        <option value="zh-CN">简体中文</option>
        <option value="en-US">English</option>
        <option value="zh-TW">繁体中文</option>
    </select>
</form>

关键注意事项

  • UseRequestLocalization必须在MapRazorComponents之前注册,否则文化规则不生效
  • 若使用Razor类库,需在类库中同步配置ResourcesPath并放置对应资源文件
  • 资源文件的命名需严格匹配组件或全局资源的命名空间

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 15:55:58