2012-11-21 27 views
9

Su Windows 8 utilizzando Visual Studio 2012 RC su un sistema tedesco, ottengo tutte le mie eccezioni localizzate in tedesco, il che significa in effetti che non posso google qualcosa di utile per loro. Per risolvere questo problema, ho già usato il seguente per cambiare il mio IDE alla lingua inglese:Ottieni messaggio di eccezione inglese anziché lingua locale

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

Tuttavia, ho il mio eccezioni in lingua tedesca localizzata. Ho provato a cambiare la cultura ThreadUI nel codice utilizzando questo codice:

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

Purtroppo, in WinRT namespace Discussione è andato in WinRT. Quindi ho provato:

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

Ho ancora il messaggio di eccezione tedesco. Qualcuno sa come ottenere la versione non localizzata dei messaggi di eccezione?

+0

google translate? :) – mcalex

+1

Lavorerò in questo sistema per almeno due mesi e davvero non voglio Google Traduttore tutto ciò che google. – Akku

+0

hai visto questo: http://stackoverflow.com/questions/209133/c-sharp-exception-messages-in-english. unlocalize.com sembra utile – mcalex

risposta

-5

Le eccezioni hanno messaggi localizzati di progettazione, è il comportamento desiderato. È necessario modificare le impostazioni del computer locale.

+1

Questa sarebbe una risposta migliore se hai spiegato come avrebbe potuto fare questo, e forse anche sul perché il Le impostazioni IDE influenzano solo l'IDE stesso e non i programmi che sono stati compilati e eseguiti dall'IDE. – TomH

+0

... e se l'OP ha detto che non lo farà o non può farlo. – mcalex

+3

Bene, i messaggi ci sono, il problema c'è, e una soluzione programmatica è disponibile per .NET 4 e inferiore nonostante la discutibile progettazione di eccezioni (cambiando la locale del thread), quindi non vedo perché non dovrebbe esserci una soluzione per .NET 4.5. Questa risposta è pigra e non adatta alla mia domanda. – Akku

2

L'altra opzione è di recuperare e visualizzare il valore Exception.HResult, che può essere cercato e trasformato in un messaggio di errore utile in inglese.

Un'altra possibilità, se queste eccezioni hanno codici Win32, anche se un 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

Ci proverò oggi e accetto se è conveniente. Grazie. – Akku

Problemi correlati