You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

API响应返回错误键而非本地化消息的问题排查求助

API响应返回错误键而非本地化消息的问题排查求助

各位大佬好,我最近在实现API的本地化错误消息功能时遇到了一个棘手的问题:明明配置了资源文件和本地化服务,但调用API时返回的始终是错误键,而不是对应的本地化文本,想请大家帮忙排查下原因。

先给大家看下我的资源文件内容示例:

name: "OrderIsClosed"
中性语言值: "Can't edit closed order."
uk-UA语言值: "Не можна редагувати закрите замовлення."

我用Postman向API发送请求,期望收到类似"Can't edit closed order."的本地化错误消息,但实际得到的响应却是这样的:

{
    "Errors": [
        "OrderIsClosed"
    ]
}

我已经做了这些配置:

  • 使用ResourceManager来获取本地化字符串
  • 配置了目标语言的本地化选项
  • 资源文件(.resx)都放在了正确的项目目录下,并且Build Action设置为Embedded Resource

我的项目结构是这样的:

Solution
├── Application
│   └── ErrorMessages
│   |   ├── ErrorMessages.resx
│   |   └── ErrorMessages.uk-UA.resx
|   └── OrderService
|
|
└── API
    └── Program.cs

下面是关键的代码片段:

Program.cs 中的本地化配置

builder.Services.AddLocalization(options => options.ResourcesPath = "ErrorMessages");
builder.Services.AddSingleton(new ResourceManager("Application.ErrorMessages.ErrorMessages",
                                    typeof(Program).GetTypeInfo().Assembly));

var supportedCultures = new[] { "en-US", "uk-UA" };
var localizationOptions = new RequestLocalizationOptions()
    .SetDefaultCulture("en-US")
    .AddSupportedCultures(supportedCultures)
    .AddSupportedUICultures(supportedCultures);
app.UseRequestLocalization(localizationOptions);

OrderService 中返回错误的代码

if (order.IsClosed())
    return ServiceResults.Failed(_localizer["OrderIsClosed"].Value);

奇怪的是,我单独写了一段测试代码直接用ResourceManager查找,是能正确拿到本地化消息的:

var resourceManager = new ResourceManager("Application.ErrorMessages.ErrorMessages", Assembly.GetExecutingAssembly());
string localizedValue = resourceManager.GetString("OrderIsClosed", new CultureInfo("uk-UA"));
Console.WriteLine($"Direct ResourceManager lookup: {localizedValue}");

这段测试代码完全正常,但放到完整的解决方案里就不行,我实在摸不着头脑,有没有大佬能帮我分析下问题出在哪?

备注:内容来源于stack exchange,提问作者Aron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 11:45:27