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

Blazor泛型组件使用IStringLocalizer无法找到本地化文件问题

Blazor泛型组件本地化文件找不到的解决方案

当泛型组件使用IStringLocalizer<Component<T>>时,本地化系统会基于泛型类型的完整签名(如YourNamespace.Component1[[YourType]])查找资源文件,而非预期的Component.resx,导致匹配失败。以下是两种可行的解决方法:

方法一:使用非泛型标记类作为本地化类型参数

创建一个空的非泛型标记类,将资源文件与该类关联,让泛型组件通过这个标记类获取本地化资源:

  1. 新建标记类:
// 与泛型组件同命名空间下创建空类
public class ComponentLocalizationMarker { }
  1. 修改泛型组件的注入代码:
public sealed partial class Component<T>
{
    [Inject] private IStringLocalizer<ComponentLocalizationMarker> L { get; set; } = default!;
    // 其他逻辑...
}
  1. 调整资源文件命名:
    将原Component.resx、Component.nl-NL.resx重命名为ComponentLocalizationMarker.resx、ComponentLocalizationMarker.nl-NL.resx,并确保文件的生成操作设为「嵌入式资源」,自定义工具设为「PublicResXFileCodeGenerator」(或对应版本的生成工具)。

方法二:通过IStringLocalizerFactory手动指定资源

直接使用本地化工厂,手动指定资源名称和所属程序集,绕过泛型类型的自动匹配逻辑:

  1. 修改泛型组件的代码:
public sealed partial class Component<T>
{
    [Inject] private IStringLocalizerFactory LocalizerFactory { get; set; } = default!;
    private IStringLocalizer L = default!;

    protected override void OnInitialized()
    {
        // 第一个参数为资源文件名称(不带.resx后缀),第二个参数为组件所在程序集的全名
        L = LocalizerFactory.Create("Component", GetType().Assembly.FullName!);
    }
    // 其他逻辑...
}
  1. 验证资源文件配置:
    确保Component.resx等文件的生成操作和自定义工具设置正确,且资源名称与Create方法中传入的字符串完全匹配(若资源文件在子命名空间下,需传入完整命名空间+文件名,如YourNamespace.Resources.Component)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 23:45:06