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
相关产品推荐
相关产品推荐

