ASP Core 2.0本地化器无法找到资源文件问题求助
解决ASP.NET Core视图本地化资源找不到的问题
我来帮你一步步排查这个问题——你的配置框架看起来是对的,但细节上可能有几个容易忽略的点导致资源找不到:
1. 检查资源文件的命名空间与工具设置
ASP.NET Core的本地化系统依赖严格的命名空间匹配,你需要确认:
- 在Visual Studio中右键你的
Home.fr.resx文件→属性:- 确保「自定义工具」是
ResXFileCodeGenerator(这会自动生成对应的资源类) - 「自定义工具命名空间」要和你的项目根命名空间一致。比如如果项目根命名空间是
MyWebApp,那这里应该设为MyWebApp.Resources.Views.Home,这样IViewLocalizer才能定位到对应的资源类。
- 确保「自定义工具」是
- 另外,打开
.resx文件,顶部的「访问修饰符」要选Public,默认的Internal可能会导致本地化服务无法访问资源。
2. 验证请求本地化中间件的顺序
这是很多人踩坑的点:app.UseRequestLocalization必须放在app.UseMvc之前!如果顺序反了,MVC处理请求时还没应用请求的文化设置,就会一直用默认的en文化,自然读不到法语资源。
调整你的Configure方法顺序:
var supportedCultures = new[] { new CultureInfo("en"), new CultureInfo("fr"), }; app.UseRequestLocalization(new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture("en"), SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }); // 确保这行在UseRequestLocalization之后 app.UseMvc();
3. 确认当前请求的文化是否正确生效
在视图里加一行代码,输出当前的UICulture:
<p>Current UICulture: @System.Globalization.CultureInfo.CurrentUICulture.Name</p>
如果显示的不是fr,说明请求本地化没生效:
- 检查是否有Cookie或查询参数(比如
?culture=fr)覆盖了Accept-Language头的设置(ASP.NET Core的请求本地化优先级是:查询参数 > Cookie > Accept-Language头 > 默认文化) - 用浏览器开发者工具确认
Accept-Language头确实传到了服务器端。
4. 测试直接指定资源类型的本地化
在视图里替换注入的Localizer,直接指定对应的资源类,看能不能读到值:
@using MyWebApp.Resources.Views.Home @inject IStringLocalizer<Home> Localizer <p>@Localizer["test"]</p>
如果这样能读到essai,说明是IViewLocalizer的自动命名空间匹配出了问题,回到第一步检查资源文件的命名空间设置。
5. 清理重建项目
有时候Visual Studio的资源文件缓存会导致生成的资源类不更新,执行:
- 菜单栏→Build→Clean Solution
- 然后Build→Rebuild Solution
确保资源文件对应的.designer.cs文件被正确生成,且包含你的test键对应的法语值。
内容的提问来源于stack exchange,提问作者Matthew Goulart
相关产品推荐
相关产品推荐

