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

ASP.NET Core MVC 6共享资源本地化失效问题求助

ASP.NET Core MVC 6 多语言本地化失效排查方案

针对你遇到的SharedResources本地化失效、仅显示资源键名的问题,从代码和配置层面梳理关键问题点及修复方案:

1. 重复注册本地化服务导致冲突

你的Program.cs中同时调用AddMvc()和AddControllersWithViews(),两者均添加了ViewLocalization但格式不一致(分别为Suffix和SubFolder),会造成服务注册逻辑混乱。保留一套服务注册即可,推荐使用AddControllersWithViews:

var builder = WebApplication.CreateBuilder(args);

// 统一本地化服务注册
builder.Services.AddLocalization(options => options.ResourcesPath = "Resources");
builder.Services.AddControllersWithViews()
    .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix) // 统一格式,Suffix/SubFolder二选一
    .AddDataAnnotationsLocalization();

builder.Services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(
    builder.Configuration.GetConnectionString("DefaultConnection")
));

var app = builder.Build();

var supportedCultures = new[] { "en-US", "cs", "sk" };
var localizationOptions = new RequestLocalizationOptions()
    .SetDefaultCulture(supportedCultures[0])
    .AddSupportedCultures(supportedCultures)
    .AddSupportedUICultures(supportedCultures);

localizationOptions.ApplyCurrentCultureToResponseHeaders = true;

app.UseRequestLocalization(localizationOptions);

// 补充必要的中间件顺序
app.UseRouting();
app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

2. 文化代码不匹配

你在Index方法中默认设置lang = "cz",但配置的支持文化是"cs"(捷克语标准文化代码为cs或cs-CZ),两者不匹配会导致无法加载对应语言资源。修改Index方法:

public IActionResult Index(string? lang)
{
    if (lang == null)
    {
        lang = "cs"; // 与supportedCultures中的代码保持一致
    }
    // 手动设置当前请求的文化
    var cultureInfo = new CultureInfo(lang);
    CultureInfo.CurrentCulture = cultureInfo;
    CultureInfo.CurrentUICulture = cultureInfo;

    ViewData["Title"] = sharedResourceLocalizer["Onas"]; 
    return View();
}

3. SharedResource类与资源文件的命名空间匹配

  • 确保SharedResource.cs的命名空间与项目根命名空间一致,例如项目根命名空间为MyWebApp,类代码应为:
namespace MyWebApp;
public class SharedResource { }
  • 资源文件命名需对应:默认文化用SharedResource.resx,捷克语用SharedResource.cs.resx,斯洛伐克语用SharedResource.sk.resx,且所有文件放在Resources文件夹下。
  • 检查资源文件属性:右键资源文件→属性,设置生成操作为嵌入的资源,自定义工具为ResXFileCodeGenerator。

4. 资源键名拼写与大小写检查

确认SharedResource.resx及对应语言的resx文件中,存在大小写完全匹配的键名Onas,无拼写错误。

内容的提问来源于stack exchange,提问作者Jan Šalomoun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:41:01