You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.NET Core 7 Blazor Server应用中使用独立程序集DLL存储本地化资源?

实现独立本地化资源DLL的Blazor Server方案

1. 创建独立资源类库

  • 新建一个和你的Blazor应用框架匹配的类库项目(推荐.NET 6+或.NET Standard 2.1)
  • 删除默认的Class1.cs,添加一个空的资源锚点类,比如SharedResources.cs(无需写任何代码,仅作为资源文件的定位标识)

2. 添加多语言资源文件

  • 在类库根目录直接添加资源文件,命名遵循规则:
    • 默认 fallback:SharedResources.resx
    • 中文资源:SharedResources.zh-CN.resx
    • 英文资源:SharedResources.en-US.resx
  • 选中每个资源文件,在属性面板设置:
    • 生成操作:Embedded resource
    • 访问修饰符:Public(确保外部程序集能访问资源)

3. 配置类库资源嵌入

在类库的.csproj文件中添加以下配置,保证资源被正确嵌入程序集:

<PropertyGroup>
  <GenerateResourceDesignerFile>true</GenerateResourceDesignerFile>
  <EmbeddedResourceUseDependentUponConvention>true</EmbeddedResourceUseDependentUponConvention>
</PropertyGroup>

编译类库,生成可复用的DLL文件。

4. 在Blazor Server应用中集成

  • 引用生成的类库项目,或打包成NuGet包后安装
  • 在Program.cs中配置本地化服务,指定使用独立类库的资源:
// 无需指定资源路径,因为用的是独立程序集
builder.Services.AddLocalization(options => options.ResourcesPath = "");

// 配置支持的文化
builder.Services.Configure<RequestLocalizationOptions>(options =>
{
    var supportedCultures = new[]
    {
        new CultureInfo("en-US"),
        new CultureInfo("zh-CN")
    };

    options.DefaultRequestCulture = new RequestCulture("zh-CN");
    options.SupportedCultures = supportedCultures;
    options.SupportedUICultures = supportedCultures;
});

// 注册基于独立程序集的本地化提供器
builder.Services.AddSingleton<IStringLocalizerFactory, ResourceManagerStringLocalizerFactory>();
  • 在_Host.cshtml中启用本地化中间件:
app.UseRequestLocalization();

5. 在组件/代码中使用本地化字符串

Razor组件中使用

@inject IStringLocalizer<SharedResources> Localizer

<h1>@Localizer["WelcomeMessage"]</h1>
<p>@Localizer["GreetingText", "John"]</p>

后台C#代码中使用

public class UserService
{
    private readonly IStringLocalizer<SharedResources> _localizer;

    public UserService(IStringLocalizer<SharedResources> localizer)
    {
        _localizer = localizer;
    }

    public string GetWelcomeTip()
    {
        return _localizer["WelcomeTip"];
    }
}

6. 关键注意事项

  • 资源文件必须和锚点类(如SharedResources.cs)放在同一目录,无需和业务组件/代码的层级对应
  • 如果需要拆分不同业务模块的资源,可添加多个锚点类(比如OrderResources.cs对应OrderResources.zh-CN.resx)
  • 部署时要确保类库主DLL和对应卫星资源DLL(如zh-CN/YourResourceLib.resources.dll)一起发布

内容的提问来源于stack exchange,提问作者arm007

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 17:55:59