Blazor 多语言核心是 IStringLocalizer + .resx 资源文件 + 语言切换逻辑,不依赖 JS;需在 Program.cs 注册 AddLocalization(),按规范命名资源文件(如 SharedResource.zh-CN.resx),组件中 @inject IStringLocalizer 使用,Server/WASM 切换文化方式不同但均原生支持。

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 localizer(注意泛型参数是资源类类型,不是字符串)使用方式: @localizer["WelcomeMessage"] 或带参数的 @localizer["HelloName", @name]若资源类未显式定义(即只用 .resx),可借助一个空的 SharedResource.cs 文件(内容仅 public class SharedResource { }),让编译器生成类型引用
动态切换语言并持久化用户选择
切换语言本质是改变当前线程/请求的 CultureInfo,并在客户端保存偏好:
Server 渲染:通过中间件或自定义 ICultureService 在每次请求前设置 HttpContext.Features.Get().RequestCultureWASM 渲染:无法改线程文化,改用 JSInterop 存 localStorage,再在 App.razor 中用 CultureChanged 事件触发重载,或配合 NavigationManager.Refresh()推荐轻量方案:封装一个 LanguageService,提供 ChangeLanguage(string culture) 方法,内部更新 CultureInfo.DefaultThreadCurrentCulture(WASM 不生效,仅作标记)+ 触发状态通知
基本上就这些。关键点是资源文件命名、注入方式、以及区分 Server/WASM 的文化切换机制。不需要第三方库,.NET 原生支持很稳。
以上就是Blazor IStringLocalizer 多语言实现教程的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1442935.html
微信扫一扫
支付宝扫一扫