2012-11-21 9 views
9

W systemie Windows 8 przy użyciu Visual Studio 2012 RC w systemie niemieckim wszystkie moje wyjątki są zlokalizowane w języku niemieckim, co oznacza, że ​​nie mogę dla nich niczego przydatnego. Aby rozwiązać ten problem, ja już stosuje się następującą zmianę mojego IDE do języka angielskiego:Otrzymuj komunikat wyjątku angielskiego zamiast języka lokalnego

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

Niemniej jednak, mam moje wyjątki w zlokalizowanym języku niemieckim. Próbuję zmienić kulturę ThreadUI w kodzie za pomocą tego kodu:

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

Niestety, w WinRT przestrzeń nazw Temat zniknął w WinRT. Dlatego próbowałem:

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

Otrzymuję komunikat o wyjątku niemieckim. Czy ktoś wie, jak uzyskać niepoliczalną wersję komunikatów o wyjątkach?

+0

google translate? :) – mcalex

+1

Będę pracował w tym systemie przez co najmniej dwa miesiące, a ja naprawdę nie chcę Google Translate wszystko, co mam google. – Akku

+0

Widziałeś to: http://stackoverflow.com/questions/209133/c-sharp-exception-messages-in-english. unlocalize.com wygląda na użyteczny – mcalex

Odpowiedz

-5

Wyjątki mają zlokalizowane wiadomości według projektu, to pożądane zachowanie. Powinieneś zmienić ustawienia komputera lokalnego.

+1

Byłoby to lepszą odpowiedzią, gdybyś wyjaśnił, w jaki sposób mógłby to zrobić, a także, być może, dlaczego Ustawienia IDE wpływają tylko na IDE, a nie programy, które zostały skompilowane i uruchomione z IDE. – TomH

+0

... a jeśli PO powie, że nie chce lub nie może tego zrobić. – mcalex

+3

Cóż, wiadomości są tam, problem jest tam, a rozwiązanie programowe jest dostępne dla .NET 4 i niższe pomimo wątpliwego projektowania wyjątków (poprzez zmianę ustawień wątku), więc nie rozumiem, dlaczego nie powinno być rozwiązanie dla .NET 4.5. Ta odpowiedź jest leniwą i nieodpowiednią do mojego pytania. – Akku

2

Inną opcją jest pobranie i wyświetlenie wartości Exception.HResult, która może być przeszukiwana i przekształcona w przydatny komunikat o błędzie w języku angielskim.

Inna możliwość, jeśli te wyjątki mają kody Win32, choć 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." 
+0

Spróbuję tego dzisiaj i zaakceptuję, jeśli będzie to wygodne. Dzięki. – Akku

Powiązane problemy