为什么IStringLocalizer有时返回对象,但有时返回字符串



我不理解IStringLocalizer中的一件事。假设我有一个端点,它返回状态代码200和一些本地化字符串。


public async Task<IActionResult> Test()
{
return Ok(localizer["Localized Text"])
}

如果我这样做,我将收到一个对象,其中包含有关该定位器的一些信息

{
"name": "Localized Text",
"value": "Localized Text translated",
"resourceNotFound": false,
"searchedLocalization": "MyApi.Translations"
}

为了成为返回翻译文本的字符串,我需要添加.Value


public async Task<IActionResult> Test()
{
return Ok(localizer["Localized Text"].Value)
}

(这只返回"本地化文本翻译"(

但是如果我有一个类具有字符串属性

public class ResponseMessage {
public string Message {get; set;}
}

并且我将定位器分配给它的字符串属性,然后我不必添加.Value来接收相应的翻译

public async Task<IActionResult> Test()
{
return Ok(new ResponseMessage {
Message = localizer["Localized Text"]
})
}

我想知道,在文档中,这种行为是在哪里描述的。因为现在它看起来像一个魔术。

IStringLocalizer索引器返回LocalizedString的一个实例,这是在第一个示例中直接返回时序列化的实例。

对于其他场景,LocalizedString通过其隐式转换运算符隐式转换为字符串。我假设隐式转换运算符只是返回LocalizedString值。

您可以查看"用户定义的转换运算符"页面,以了解有关隐式转换的更多信息。

最新更新