17370845950

Blazor 怎么进行国际化和本地化
Blazor国际化核心是识别多语言环境并正确显示文本、日期等,需注册本地化服务、配置文化支持、准备资源文件、注入本地化器使用文本、实现运行时切换语言。

Blazor 实现国际化(i18n)和本地化(l10n)核心是两件事:让应用能识别多种语言环境,再把界面文本、日期、数字等按当前语言正确显示。不依赖第三方 UI 库也能做,但用 BootstrapBlazor、MudBlazor 或 Ant Design Blazor 会更省事——它们都内置了成熟方案。

注册本地化服务并配置文化支持

无论用哪个组件库,第一步都是在 Program.cs 中注册 .NET 原生本地化服务,并声明支持的语言列表:

  • 调用 builder.Services.AddLocalization(),指定资源路径(如 ResourcesLocalization
  • 添加对应 UI 库的本地化扩展,例如:
     • BootstrapBlazor:AddBootstrapBlazor(options => options.DefaultCulture = "zh-CN")
     • MudBlazor:AddMudLocalization()
     • Ant Design Blazor:AddAntDesign() 自动集成
  • 配置 RequestLocalizationOptions,设置默认文化、支持的文化数组(如 ["en-US", "zh-CN", "fr-FR"]),并启用中间件 app.UseRequestLocalization()

准备多语言资源文件

资源文件是翻译内容的载体,主流方式有两种:

  • JSON 文件(推荐用于 BootstrapBlazor / Ant Design)
     • 放在 Localization/ 目录下
     • 命名如 en-US.jsonzh-CN.json
     • 结构支持嵌套键,例如:{"Components.Table": {"AddButtonText": "New"}}
  • .resx 资源文件(.NET 传统方式,适合 MudBlazor 或自定义场景)
     • 按命名规范如 Button.en-US.resxButton.zh-CN.resx
     • 可放在 Resources/Components/ 下,便于按模块管理
     • Visual Studio 会自动生成强类型类,支持编译时检查

在组件中使用本地化文本

不用硬编码字符串,而是通过注入本地化器获取动态文本:

  • 在 Razor 组件顶部注入:@inject IStringLocalizer Localizer(对应 .resx)或 @inject IStringLocalizer Localizer(通用)
  • 在 HTML 中直接使用:@Localizer["SaveButton"] 或带参数:@Localizer["HelloName", userName]
  • 组件库自带的按钮、表格等,只要用了其标准属性(如 TextConfirmContentText),且资源键匹配,就会自动翻译

运行时切换语言

用户点一下就换语言,关键在于更新当前线程的 CultureInfo 并触发重绘:

  • 调用 LocaleProvider.SetLocale("en-US")(Ant Design)
  • 或手动设置:
    CultureInfo.CurrentCulture = new CultureInfo("fr-FR");
    CultureInfo.CurrentUICulture = new CultureInfo("fr-FR");
  • 最后别忘了 StateHasChanged() 或触发页面刷新(如跳转带 culture 参数的

    URL)
  • 常见做法是加一个语言切换下拉框,选中后保存到 localStorage 或 Cookie,下次加载自动读取

基本上就这些。重点不是堆砌配置,而是资源键统一、文化切换可靠、回退机制健全(比如 zh-CN 找不到就试 zh,再不行回 en-US)。做起来不复杂,但容易忽略缓存、路径拼写、大小写一致性这些细节。