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):
PrestaShop 开源网店系统是一款针对web2.0设计的全功能、跨平台的免费开源电子商务解决方案,自08年1.0版本发布,短短两年时间,发展迅速,全球已超过四万家网店采用Prestashop进行布署。Prestashop 开源网店系统基于Smarty引擎编程设计,模块化设计,扩展性强,能轻易实现多种语言,多种货币浏览交易,支持Paypal等几乎所有的支付手段,是外贸网站建站的佳选。Prest
- 顶部注入:
@inject IStringLocalizer(注意泛型参数是资源类类型,不是字符串)localizer - 使用方式:
@localizer["WelcomeMessage"]或带参数的@localizer["HelloName", @name] - 若资源类未显式定义(即只用 .resx),可借助一个空的
SharedResource.cs文件(内容仅public class SharedResource { }),让编译器生成类型引用
动态切换语言并持久化用户选择
切换语言本质是改变当前线程/请求的 CultureInfo,并在客户端保存偏好:
- Server 渲染:通过中间件或自定义
ICultureService在每次请求前设置HttpContext.Features.Get().RequestCulture - WASM 渲染:无法改线程文化,改用
JSInterop存 localStorage,再在App.razor中用CultureChanged事件触发重载,或配合NavigationManager.Refresh() - 推荐轻量方案:封装一个
LanguageService,提供ChangeLanguage(string culture)方法,内部更新CultureInfo.DefaultThreadCurrentCulture(WASM 不生效,仅作标记)+ 触发状态通知
基本上就这些。关键点是资源文件命名、注入方式、以及区分 Server/WASM 的文化切换机制。不需要第三方库,.NET 原生支持很稳。









