.NET Core 6 MVC中ViewLocalizer本地化失效问题求助
ASP.NET Core 6 MVC ViewLocalizer 不生效问题的解决方案
1. 修正服务注册顺序
AddLocalization必须在AddControllersWithViews().AddViewLocalization之前执行,视图本地化依赖全局本地化配置(如ResourcesPath),颠倒顺序会导致配置不生效。修改Program.cs代码:
// 先配置本地化基础服务 builder.Services.AddLocalization(options => { options.ResourcesPath = "Resources"; }); // 再添加MVC并启用视图本地化 builder.Services.AddControllersWithViews() .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix); // 配置请求本地化选项 builder.Services.Configure<RequestLocalizationOptions>(options => { var supportedCultures = new[] { new CultureInfo("en-US"), new CultureInfo("tr-TR"), new CultureInfo("fr") }; options.DefaultRequestCulture = new RequestCulture("en-US"); options.SupportedUICultures = supportedCultures; options.SupportedCultures = supportedCultures; // 明确设置请求文化提供器优先级,确保查询字符串优先生效 options.RequestCultureProviders = new List<IRequestCultureProvider> { new QueryStringRequestCultureProvider(), new CookieRequestCultureProvider(), new AcceptLanguageHeaderRequestCultureProvider() }; });
2. 匹配资源文件路径与视图路径
你的视图对应路径为Views/Kategori/CurrentKategori.cshtml(URL为/Kategori/CurrentKategori),资源文件必须与视图路径严格对应,将资源文件从Resources/Views/Category目录移至Resources/Views/Kategori下:
- 正确路径:
Resources/Views/Kategori/CurrentKategori.en-US.resx - 正确路径:
Resources/Views/Kategori/CurrentKategori.tr-TR.resx - 正确路径:
Resources/Views/Kategori/CurrentKategori.fr.resx
3. 调整中间件顺序
app.UseRequestLocalization()必须放在路由配置之前,确保文化信息在路由解析前生效。修改Program.cs的中间件顺序:
var app = builder.Build(); // 其他中间件(如UseHttpsRedirection、UseStaticFiles) app.UseHttpsRedirection(); app.UseStaticFiles(); // 本地化中间件必须在路由之前 app.UseRequestLocalization(); app.UseRouting(); app.UseAuthorization(); app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run();
4. 检查资源文件生成配置
每个.resx文件的属性需正确设置,否则资源无法被程序读取:
- 在解决方案资源管理器右键点击.resx文件,选择「属性」
- 设置生成操作为
嵌入式资源 - 设置自定义工具为
PublicResXFileCodeGenerator
5. 完善URL文化切换参数
切换文化时需同时指定culture和ui-culture参数,UICulture直接决定资源文件的查找逻辑:
https://localhost:44338/Kategori/CurrentKategori/?culture=en-US&ui-culture=en-US
6. 避免系统区域设置覆盖默认文化
若系统默认区域为土耳其语,可能会覆盖配置的默认请求文化,可在RequestLocalizationOptions中禁用父文化回退:
options.FallBackToParentCultures = false; options.FallBackToParentUICultures = false;
内容的提问来源于stack exchange,提问作者Kamer
相关产品推荐
相关产品推荐

