【问题标题】:Get English exception message instead of local language获取英语异常消息而不是本地语言
【发布时间】:2012-11-21 12:52:37
【问题描述】:

在德语系统上使用 Visual Studio 2012 RC 的 Windows 8 上,我将所有异常都本地化为德语,这实际上意味着我无法在谷歌上搜索任何对它们有用的东西。为了解决这个问题,我已经使用以下方法将我的 IDE 更改为英语:

Tools --> Options --> Internetional Settings --> Language --> English

尽管如此,我在本地化的德语中得到了例外。我尝试使用以下代码更改代码中的 ThreadUI 文化:

Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-us");

遗憾的是,在 WinRT 中,线程命名空间在 WinRT 中消失了。因此我尝试了:

System.Globalization.CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("en-us");

我仍然收到德国异常消息。有谁知道如何获取异常消息的非本地化版本?

【问题讨论】:

  • 我将在这个系统中工作至少两个月,我真的不想谷歌翻译我谷歌的所有内容。
  • 你见过这个吗:stackoverflow.com/questions/209133/…。 unlocalize.com 看起来很有用
  • 不起作用,正如我已经写的那样,“新 System.Threading.Thread”是不可能的,因为 WinRT 中不再存在。
  • 啊,是的,unlocalize.com 可以帮助我解决这个问题,但这与使用谷歌翻译基本相同。我不想去另一个网站翻译所有内容,我只想要那里某处的原始信息。
  • 哦,顺便说一句。当然,您可以将您的 Windows 安装设置为英文,但请假设我不会或不能这样做。

标签: .net localization windows-runtime locale


【解决方案1】:

您的另一个选择是检索并显示Exception.HResult 值,可以对其进行搜索并转换为有用的英文错误消息。

另一种可能性,如果这些异常有 Win32 代码,尽管是 hack:

[DllImport("kernel32.dll",
           EntryPoint = "FormatMessageW",
           SetLastError = true,
           CharSet = CharSet.Auto)]
private static extern int FormatMessage(
    int dwFlags,
    IntPtr lpSource,
    int dwMessageId,
    int dwLanguageId,
    StringBuilder lpBuffer,
    int nSize,
    IntPtr[] Arguments);

// used like:
var builder = new StringBuilder(2048);
var res = FormatMessage(
    0x1000|0x0200/*System Message, Ignore Inserts*/,
    IntPtr.Zero,
    exception.HResult,
    new CultureInfo("en-US").LCID,
    builder,
    builder.Capacity,
    null);
 Console.WriteLine("{0}", builder.ToString());
 // throw new StackOverflowException()
 // "Recursion too deep; the stack overflowed."

【讨论】:

  • 并非总是可用,例如HttpException(en:文件不存在。,de:Die Datei URL ist nicht vorhanden。)。但是 HRESULT 是 0x80004005 ,它会转化为无意义的 Unspecified error 消息。
【解决方案2】:

异常在设计上具有本地化消息,这是所需的行为。您应该更改本地计算机设置。

【讨论】:

  • 如果您解释了他是如何做到这一点的,这将是一个更好的答案,也许还解释了为什么 IDE 设置只影响 IDE 本身,而不影响已经编译和运行的程序,IDE。
  • ...如果 OP 说他不会或不能这样做。
  • 好吧,消息就在那里,问题就在那里,尽管异常设计有问题(通过更改线程区域设置),但程序解决方案可用于 .NET 4 及更低版本,所以我不能看看为什么不应该有 .NET 4.5 的解决方案。这个答案很懒惰,不适合我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-08
  • 2019-01-27
  • 2010-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多