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

Blazor 实现国际化(i18n)和本地化(l10n)核心是两件事:让应用能识别多种语言环境,再把界面文本、日期、数字等按当前语言正确显示。不依赖第三方 UI 库也能做,但用 BootstrapBlazor、MudBlazor 或 Ant Design Blazor 会更省事——它们都内置了成熟方案。
注册本地化服务并配置文化支持
无论用哪个组件库,第一步都是在 Program.cs 中注册 .NET 原生本地化服务,并声明支持的语言列表:
- 调用
builder.Services.AddLocalization(),指定资源路径(如Resources或Localization) - 添加对应 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.json、zh-CN.json
• 结构支持嵌套键,例如:{"Components.Table": {"AddButtonText": "New"}} -
.resx 资源文件(.NET 传统方式,适合 MudBlazor 或自定义场景):
• 按命名规范如Button.en-US.resx、Button.zh-CN.resx
• 可放在Resources/Components/下,便于按模块管理
• Visual Studio 会自动生成强类型类,支持编译时检查
在组件中使用本地化文本
不用硬编码字符串,而是通过注入本地化器获取动态文本:
- 在 Razor 组件顶部注入:
@inject IStringLocalizer(对应 .resx)或Localizer @inject IStringLocalizer Localizer(通用) - 在 HTML 中直接使用:
@Localizer["SaveButton"]或带参数:@Localizer["HelloName", userName] - 组件库自带的按钮、表格等,只要用了其标准属性(如
Text、ConfirmContentText),且资源键匹配,就会自动翻译
运行时切换语言
用户点一下就换语言,关键在于更新当前线程的 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)。做起来不复杂,但容易忽略缓存、路径拼写、大小写一致性这些细节。










