Blazor IStringLocalizer 多语言实现教程

来源:这里教程网 时间:2026-02-21 17:33:15 作者:

Blazor 中使用

IStringLocalizer
实现多语言,核心是结合 .NET 的本地化服务 + 资源文件(.resx)+ 语言切换逻辑。它不依赖 JavaScript,完全在 C# 层完成,适合 Server、WASM 和 Hybrid 项目。

配置本地化服务

Program.cs
(.NET 6+)中注册本地化服务:

Server 项目:调用
builder.Services.AddRazorComponents().AddInteractiveServerComponents()
后,添加
AddLocalization()
WASM 项目:同样调用
AddLocalization()
,并确保资源文件被正确发布(默认会自动包含)
语言文化需通过
RequestLocalizationOptions
设置支持列表,例如
new[] { "zh-CN", "en-US", "ja-JP" }

准备资源文件(.resx)

资源文件必须按命名规范放置,Blazor 才能自动匹配:

新建文件夹
Resources
(推荐),在其中创建
SharedResource.resx
(默认语言,如中文)
对应英文版:
SharedResource.en-US.resx
;日文版:
SharedResource.ja-JP.resx
文件属性中,将
Build Action
设为
Embedded Resource
Custom Tool
留空(不要设为 PublicResXFileCodeGenerator)
类名不重要,但资源键名要统一,比如
WelcomeMessage
,各语言文件里填对应翻译

在组件中注入并使用 IStringLocalizer

以 Razor 组件为例(如

Counter.razor
):

顶部注入:
@inject IStringLocalizer<sharedresource> localizer</sharedresource>
(注意泛型参数是资源类类型,不是字符串)
使用方式:
@localizer["WelcomeMessage"]
或带参数的
@localizer["HelloName", @name]
若资源类未显式定义(即只用 .resx),可借助一个空的
SharedResource.cs
文件(内容仅
public class SharedResource { }
),让编译器生成类型引用

动态切换语言并持久化用户选择

切换语言本质是改变当前线程/请求的

CultureInfo
,并在客户端保存偏好:

Server 渲染:通过中间件或自定义
ICultureService
在每次请求前设置
HttpContext.Features.Get<irequestculturefeature>().RequestCulture</irequestculturefeature>
WASM 渲染:无法改线程文化,改用
JSInterop
存 localStorage,再在
App.razor
中用
CultureChanged
事件触发重载,或配合
NavigationManager.Refresh()
推荐轻量方案:封装一个
LanguageService
,提供
ChangeLanguage(string culture)
方法,内部更新
CultureInfo.DefaultThreadCurrentCulture
(WASM 不生效,仅作标记)+ 触发状态通知

基本上就这些。关键点是资源文件命名、注入方式、以及区分 Server/WASM 的文化切换机制。不需要第三方库,.NET 原生支持很稳。

相关推荐