ASP.NET Core 7.0中IStringLocalizer资源文件路径配置求助
ASP.NET Core 7.0 Identity Login页面IStringLocalizer资源文件存放方案
针对你遇到的IStringLocalizer无法定位.resx文件的问题,核心要匹配目标类的命名空间与资源文件的目录结构,结合ASP.NET Core本地化的默认查找规则,给出以下两种可行方案:
方案1:绑定LoginModel的专属资源
如果你的IStringLocalizer是注入到LoginModel中使用(如private readonly IStringLocalizer<LoginModel> _localizer;),需严格遵循以下规则:
- 确认LoginModel的命名空间:默认生成的LoginModel命名空间为
你的项目名.Areas.Identity.Pages.Account - 创建对应目录结构:在项目根目录的
Resources文件夹下,建立与命名空间完全匹配的层级:Resources └── Areas └── Identity └── Pages └── Account ├── LoginModel.resx # 默认语言资源 └── LoginModel.zh-CN.resx # 中文本地化资源(按需添加其他语言) - 验证项目配置:确保
.csproj中已将资源文件设置为嵌入式资源:
同时在Program.cs/Startup.cs中指定资源根路径:<ItemGroup> <EmbeddedResource Include="Resources/**/*.resx" /> </ItemGroup>builder.Services.AddLocalization(options => options.ResourcesPath = "Resources");
方案2:使用Identity共享资源类
若需要多个Identity页面共用一套本地化资源,可创建共享资源类:
- 创建共享资源类:在
Areas/Identity目录下新建空类IdentitySharedResource.cs(无需任何代码),命名空间为你的项目名.Areas.Identity - 存放资源文件:在
Resources/Areas/Identity目录下创建对应资源文件:Resources └── Areas └── Identity ├── IdentitySharedResource.resx └── IdentitySharedResource.zh-CN.resx - 注入使用:在LoginModel中注入
IStringLocalizer<IdentitySharedResource>,通过_localizer["Key"]调用文本
排查要点
- 清理项目并重新生成,避免缓存导致资源未加载
- 确保资源文件名与类名完全一致(大小写敏感)
- 验证本地化中间件配置是否包含Razor Pages支持:
builder.Services.AddRazorPages() .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix) .AddDataAnnotationsLocalization();
内容的提问来源于stack exchange,提问作者mariob
相关产品推荐
相关产品推荐

