在 .net5 中本地化期间处理异常

Handling exceptions during localizing in .net5

请问是否可以在本地化过程中处理异常?例如,我最近在我的 resx 文件中犯了错误,我的本地化程序导致在一种语言中用户得到错误(在翻译版本中我写了类似“foo {2} bar”而不是“foo {0} bar”的东西)。我会喜欢处理本地化程序 returns “未翻译”字符串的异常。

是否可以为定位器编写某种特殊的异常处理程序?它应该实现任何接口还是什么?

非常感谢您的回答。

我认为您可能需要使用 OnResourceExecuted() 自定义资源过滤器。

Filter types

每种过滤器类型在过滤器管道的不同阶段执行:

  • 授权过滤器

运行 首先,用于判断用户是否被授权请求。如果请求未被授权,授权过滤器会短路管道。

  • 资源过滤器

运行授权后
OnResourceExecuting 运行s 过滤器管道其余部分之前的代码。例如OnResourceExecuting运行模型绑定前的代码。
OnResourceExecuted 运行 管道其余部分完成后的代码。

  • 动作过滤器

运行 调用动作方法前后的代码。
可以更改传递到动作中的参数。可以更改操作返回的结果。
Razor Pages 不支持。

  • 异常过滤器

将全局策略应用于在写入响应正文之前发生的未处理异常。

  • 结果过滤器

运行 动作结果执行前后的代码。它们 运行 仅当操作方法已成功执行时。它们对于必须围绕视图或格式化程序执行的逻辑很有用。

The following diagram 显示过滤器类型如何在过滤器管道中交互。

我使用了一种没有任何中间件的更简单的方法,我将异常消息翻译成本地化的字符串,如下所示,

使用原始异常消息调用 catch 中的方法 捕获(异常 dex)

    {

        return Json(new { success = false, responseText = Models.SiteUtils.FriendlyErrorMessage(dex) });
    }

错误消息本地化方法,将搜索异常消息并获取您的版本, 注意我使用 Message.Contains(x.OriginalError) 所以我不需要完全翻译他的整个信息,如果你需要根据你自己的逻辑你可以决定使用完全匹配

 public static string FriendlyErrorMessage(Exception dex)
        {
            var Message = dex.Message;
            var listOfStrings = new tblErrorMsgMappingVM().GetAll().ToList();


            var ErrorMessage = listOfStrings.Find(x => Message.Contains(x.OriginalError));

            if (ErrorMessage != null)
            {
                Message = ErrorMessage.ErrorMessage;

            }
            else
                Message = "Unknown Error ,pelase review the log";
           
            var value = new tblLocalizationRecordsVM().GetResourceValue(Message, "ErrorMsg");
            return value;
        }