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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:09:37