.NET Core API语言资源无法正常工作问题求助
.NET Core API本地化失效的排查与修复
针对你提供的配置,以下是核心问题及对应的修复方案:
1. 本地化器注入类型错误
控制器中注入了IStringLocalizer<ResourcesController>,但项目中不存在ResourcesController类,且你的资源文件基于SharedResource定义,两者不匹配。
修复后控制器代码:
public class TestController : ControllerBase { private readonly IStringLocalizer<SharedResource> _localizer; public TestController(IStringLocalizer<SharedResource> localizer) { _localizer = localizer; } [HttpGet("TestCulture")] public IActionResult TestCulture() { var testMsg = _localizer["NotFound"]; return Ok(testMsg); } }
2. 资源文件命名与结构不匹配
资源文件命名为SharedResources.en-US.resx(多了一个s),但对应的类是SharedResource.cs,两者名称必须严格一致(含大小写)。同时需确保SharedResource.cs的命名空间与项目根命名空间一致。
修复步骤:
- 将资源文件重命名为:
SharedResource.en-US.resx、SharedResource.zh-CN.resx - 修正
SharedResource.cs的命名空间(示例项目名为MyProject):
namespace MyProject.Resources.Shared; public class SharedResource { }
3. 请求本地化中间件位置错误
UseRequestLocalization必须放在UseHttpsRedirection、UseAuthorization等中间件之前,确保请求文化先被解析生效。
修复后Program.cs代码片段:
var app = builder.Build(); // 优先启用请求本地化 var localizationOptions = app.Services.GetRequiredService<IOptions<RequestLocalizationOptions>>().Value; localizationOptions.FallBackToParentCultures = true; localizationOptions.FallBackToParentUICultures = true; app.UseRequestLocalization(localizationOptions); // 再启用其他中间件 app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers();
4. 资源文件属性配置错误
确保所有.resx文件的属性设置正确:
- 生成操作:设置为
嵌入的资源 - 自定义工具:设置为
ResXFileCodeGenerator - 自定义工具命名空间:与
SharedResource.cs的命名空间保持一致
5. 验证请求文化传递方式
测试时需明确指定请求文化,常用方式:
- 通过
Accept-Language请求头:例如Accept-Language: zh-CN或Accept-Language: en-US - 通过查询参数:
/TestCulture?culture=zh-CN
额外检查点
- 确认
SharedResource.cs是无成员的空类 - 验证
.resx文件中存在NotFound键,且对应语言的内容正确 - 清理项目并重新生成,避免缓存干扰
内容的提问来源于stack exchange,提问作者Gary Lau
相关产品推荐
相关产品推荐

