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<mycomponent> Localizer</mycomponent>(对应 .resx)或
@inject IStringLocalizer Localizer(通用) 在 HTML 中直接使用:
@Localizer["SaveButton"]或带参数:
@Localizer["HelloName", userName]组件库自带的按钮、表格等,只要用了其标准属性(如
Text、
ConfirmContentText),且资源键匹配,就会自动翻译
运行时切换语言
用户点一下就换语言,关键在于更新当前线程的
CultureInfo并触发重绘: 调用
LocaleProvider.SetLocale("en-US")(Ant Design)
或手动设置:CultureInfo.CurrentCulture = new CultureInfo("fr-FR");<br>CultureInfo.CurrentUICulture = new CultureInfo("fr-FR");
最后别忘了 StateHasChanged()或触发页面刷新(如跳转带 culture 参数的 URL) 常见做法是加一个语言切换下拉框,选中后保存到 localStorage 或 Cookie,下次加载自动读取
基本上就这些。重点不是堆砌配置,而是资源键统一、文化切换可靠、回退机制健全(比如 zh-CN 找不到就试 zh,再不行回 en-US)。做起来不复杂,但容易忽略缓存、路径拼写、大小写一致性这些细节。
