.NET Core 2.2 Razor Page本地化失效问题求助
解决ASP.NET Core 2.2 Razor Page本地化不生效的问题
我来帮你排查并解决这个本地化不生效的问题,主要从中间件顺序、资源文件命名/结构、配置细节这几个核心方向入手:
1. 修正中间件顺序(最关键的问题)
你的Configure方法里中间件的执行顺序不对,UseRequestLocalization必须放在所有依赖文化设置的中间件之前,尤其是UseMvc——因为Mvc处理请求时需要读取当前文化信息。另外你重复调用了多次UseStaticFiles,这完全没必要,直接保留一次即可。
修改后的Configure方法代码:
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { // 第一步:配置请求本地化,确保后续所有中间件都能拿到正确的文化设置 var supportedCultures = new[] { new CultureInfo("en-US"), new CultureInfo("es-ES") }; app.UseRequestLocalization(new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture("en-US"), SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }); // 第二步:处理静态文件、Cookie策略 app.UseStaticFiles(); app.UseCookiePolicy(); // 最后:配置Mvc路由 app.UseMvc(); }
2. 修正资源文件的命名与存放结构
对于Razor Page的IViewLocalizer,资源文件的命名和位置必须严格匹配视图的路径:
- 你的视图位于
Pages/Index.cshtml,结合你设置的ResourcesPath = "Resources",视图对应的本地化资源文件应该放在Resources/Pages/目录下,命名为Index.es.resx(对应西班牙语)。 - 如果是给
IndexModel注入的IStringLocalizer<IndexModel>用的资源,需要放在Resources/根目录下,命名为IndexModel.es.resx。
调整后的资源文件结构应该是这样的:
Resources/ ├─ Pages/ │ ├─ Index.es.resx // 供视图的IViewLocalizer调用 ├─ IndexModel.es.resx // 供PageModel的IStringLocalizer调用
3. 确保资源文件的访问修饰符正确
打开你的.resx文件,在Visual Studio的属性窗口里,把访问修饰符设置为Public(默认是Internal,即使是同项目内,设置为Public能避免很多潜在的访问权限问题)。
4. 优化文化切换的请求参数
测试时建议同时指定culture和ui-culture参数,避免因默认逻辑导致的识别问题:
https://localhost:44345/?culture=es-ES&ui-culture=es-ES
5. 额外的验证步骤
- 清理项目的
bin和obj目录,然后重新生成解决方案,避免缓存的旧资源文件干扰结果。 - 确认
Index.es.resx里的键名Overview是完全匹配的——本地化键名是大小写敏感的,不要出现拼写错误。
按照上面的步骤调整后,再测试文化切换应该就能正常生效了。
内容的提问来源于stack exchange,提问作者Welsh King
相关产品推荐
相关产品推荐

