ASP.NET Core中ViewLocalizer显示键而非值的问题排查
解决ASP.NET Core本地化显示键名而非值的问题
针对你遇到的ViewLocalizer显示键名而非对应文本的问题,按以下步骤排查修复:
1. 检查资源文件的命名与位置
- 资源文件需遵循视图匹配规则:如果是
Shared/_Layout.cshtml的资源,要放在Resources/Views/Shared目录下,命名为Shared.en.resx(英文)和Shared.ar.resx(阿拉伯语);如果是Home/Index.cshtml这类页面视图,资源文件要放在Resources/Views/Home下,命名为Index.en.resx和Index.ar.resx。 - 若使用全局共用资源,文件需放在
Resources根目录,命名为Views.en.resx、Views.ar.resx,后续要在配置中指定资源路径。
2. 完善Program.cs的本地化配置
在Program.cs中补充关键配置代码:
// 指定资源文件所在路径 builder.Services.AddLocalization(options => options.ResourcesPath = "Resources"); builder.Services.AddControllersWithViews() // 启用视图本地化,按后缀匹配资源文件 .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix) .AddDataAnnotationsLocalization(); // 配置支持的语言文化 var supportedCultures = new[] { "en", "ar" }; var localizationOptions = new RequestLocalizationOptions() .SetDefaultCulture("en") .AddSupportedCultures(supportedCultures) .AddSupportedUICultures(supportedCultures); app.UseRequestLocalization(localizationOptions);
3. 检查资源文件的访问权限
- 右键点击resx文件→属性,确认自定义工具设置为
PublicResXFileCodeGenerator;打开resx编辑器,将顶部的访问修饰符设为public。只有公开的资源类,ViewLocalizer才能正确读取文本值。
4. 确认视图中的注入正确
确保使用ViewLocalizer的视图顶部有正确的注入代码:
@inject IViewLocalizer ViewLocalizer
调整完成后重新运行项目,可通过查询字符串?culture=en或?culture=ar切换语言,即可看到对应的本地化文本。
内容的提问来源于stack exchange,提问作者Abdulsalam Elsharif
相关产品推荐
相关产品推荐

