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
相关产品推荐
相关产品推荐

