11

ドイツ語のシステムで Visual Studio 2012 RC を使用している Windows 8 では、すべての例外がドイツ語にローカライズされています。これを解決するために、私はすでに以下を使用して IDE を英語に変更しました。

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

それにもかかわらず、ローカライズされたドイツ語では例外が発生します。このコードを使用して、コードで ThreadUI カルチャを変更しようとしました。

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

悲しいことに、WinRT では Thread 名前空間が WinRT でなくなりました。したがって、私は試しました:

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

ドイツ語の例外メッセージがまだ表示されます。ローカライズされていないバージョンの例外メッセージを取得する方法を知っている人はいますか?

4

2 に答える 2

2

もう1つのオプションは、値を取得して表示すること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."
于 2012-11-21T15:26:59.533 に答える
-5

例外は、設計によりローカライズされたメッセージを持っています。これは望ましい動作です。ローカル コンピューターの設定を変更する必要があります。

于 2012-11-21T13:46:28.940 に答える