【问题标题】:Log and display .NET exceptions in multiple languages以多种语言记录和显示 .NET 异常
【发布时间】:2013-01-13 14:54:00
【问题描述】:

我正在数据库中记录我的应用程序的错误消息和 .NET 异常,并将它们显示在 GUI 上。 GUI 以运行应用程序的用户所在地区的语言显示错误消息。为了实现这一点,我只记录错误消息的资源名称,并使用资源文件将它们转换为有意义的消息。

然而,我不知道如何为 .NET 标准异常消息实现相同的目标。我只能记录消息字符串,但是该语言已经被“烘焙”了,所以我只能以该单一语言显示异常。

有没有办法获取.NET异常的资源名称+所有插入到消息字符串中的参数,以便我可以记录这些?

【问题讨论】:

  • 你能提供一个例子来说明你是如何使用异常处理的吗?您是否有一个继承自 System.ApplicationException 的类,所以您的所有错误都会捕获 MyAppException?
  • 您是否在使用 Nlog 或 Log4Net 等日志框架?

标签: c# .net exception-handling internationalization


【解决方案1】:

没有资源名称这样的例外,但有HResult property of the Exception class。标准.NET framework exceptions have valid and unique HResult numbers 然后您可以将其映射到您自己的资源标识符,然后您可以翻译。 此外还有Exception.Data 属性,可能包含有关异常的其他信息。

或者,您可以使用正则表达式等手动解析异常消息,然后映射到您的资源 id,但我认为这太费力了。

【讨论】:

    【解决方案2】:

    我也遇到了这个问题,并对此进行了大量研究。根据我所知道的一切,没有办法本地化异常本身,因为您看到的不是本地化字符串,而是实际代码。该代码仅以一种语言(英语)编写,并且只能这样显示。

    【讨论】:

    • 这不是真的。如果您安装 .Net 语言包,则会以当前语言显示异常(例如,如果应用程序的文化设置为 ES-ES,则典型的 object reference not set to an instance of an object 变为 referencia a objeto no establecida a una instancia de un objeto(西班牙语)
    • 我不想本地化异常(这很容易使用语言包 - 正如 HighCore 所说 - 和 2 行代码,顺便说一句)。我想获取异常消息字符串的资源名+参数。
    • 是的,但在这种情况下,异常记录在当时运行的应用程序的文化中。 Daniel 想要显示已经用不同语言记录的异常。
    猜你喜欢
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多