ASP.NET Core 7.0 MVC本地化配置失效,请求排查解决
ASP.NET Core 7.0 MVC 本地化返回键名而非值的排查方案
1. 资源文件配置验证
- 检查资源文件生成操作:右键资源文件 → 属性,确保生成操作设置为
Embedded resource,未设置的话资源无法被程序集读取。 - 确认资源文件命名与控制器命名空间匹配:若HomeController的命名空间是
YourProject.Controllers,资源文件前缀需对应为YourProject.Controllers.HomeController(而非仅Controllers.HomeController),否则无法匹配到对应资源。
2. IStringLocalizer注入正确性
控制器中必须注入带泛型参数的IStringLocalizer<HomeController>,而非无泛型的IStringLocalizer,示例代码:
private readonly IStringLocalizer<HomeController> _localizer; public HomeController(IStringLocalizer<HomeController> localizer) { _localizer = localizer; }
泛型参数需与当前控制器类型完全一致,才能正确关联对应的资源文件。
3. 中间件顺序检查
app.UseRequestLocalization必须放在路由中间件之前,正确的中间件顺序示例:
app.UseRequestLocalization(app.Services.GetRequiredService<IOptions<RequestLocalizationOptions>>().Value); app.UseRouting(); app.UseAuthorization(); app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}");
若中间件顺序颠倒,请求文化信息无法被正确识别,导致本地化失效。
4. 请求文化传递验证
默认情况下,ASP.NET Core通过查询参数culture和ui-culture识别请求文化,可通过访问/?culture=bg-BG&ui-culture=bg-BG测试是否生效。同时可在控制器中添加调试代码,确认当前文化:
var currentUICulture = CultureInfo.CurrentUICulture.Name;
若输出不是配置的en-US或bg-BG,说明请求文化未被正确设置,需检查RequestLocalizationOptions的配置是否正确生效。
5. ResourcesPath路径验证
确认Resources文件夹位于项目根目录,且名称大小写完全匹配(如不要写成resources)。若文件夹在子目录下,需调整ResourcesPath配置,例如opts => opts.ResourcesPath = "SubFolder/Resources"。
内容的提问来源于stack exchange,提问作者Lucho Gizdov
相关产品推荐
相关产品推荐

