2012-11-21 90 views
9

在德語系統上使用Visual Studio 2012 RC的Windows 8上,我將所有例外語言本地化爲德語,這實際上意味着我無法在Google上爲他們提供任何有用的信息。爲了解決這個問題,我已經使用了以下我的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"); 

我仍然收到德國的異常消息。有誰知道如何獲取異常消息的未本地化版本?

+0

谷歌翻譯? :) – mcalex

+1

我會在這個系統工作至少兩個月,我真的不想谷歌翻譯我的谷歌的一切。 – Akku

+0

你見過這個:http://stackoverflow.com/questions/209133/c-sharp-exception-messages-in-english。 unlocalize.com看起來很有用 – mcalex

回答

-5

異常通過設計具有本地化的消息,這是期望的行爲。您應該更改您的本地計算機設置。

+1

這將是一個更好的答案,如果你解釋他如何能夠做到這一點,也可能是爲什麼IDE設置隻影響IDE本身,而不影響已經與IDE一起編譯和運行的程序。 – TomH

+0

...如果OP說他不會或不能這樣做。 – mcalex

+3

那麼,消息是存在的,問題在那裏,並且一個程序化的解決方案可用於.NET 4和更低的儘管異常(通過更改線程區域設置)的可疑設計,所以我不明白爲什麼不應該有一個.NET 4.5的解決方案。這個答案很懶,不適合我的問題。 – Akku

2

您的其他選項是檢索並顯示Exception.HResult值,該值可以在英文中進行搜索並轉化爲有用的錯誤消息。

另一種可能性,如果這些異常有Win32的代碼,雖然黑客攻擊:

[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." 
+0

今天我會嘗試,如果方便的話,接受。謝謝。 – Akku

相關問題