2016-03-28 5 views
2

Ich habe eine .NET-Anwendung (VB.NET), die gut funktionierte, bis jemand aus Deutschland es versuchte.Wie erzwinge ich die Sprache einer .NET-Anwendung?

Ich kann sehen, dass das Problem im ist Ausnahme mit „versuchen Fangbefreiung“ und Parsen der Befreiung Zeichenfolge zu kontrollieren.

Dies funktioniert gut, wenn die Anwendung auf Englisch ist, aber in einer anderen Sprache versagt (offensichtlich, aber ich hätte nie gedacht, es wäre eine solche weltweite Nutzung).

Also anstatt rewritting alle meine Fehlerbehandlung (wo ich anfangen soll!) Gibt es einen Weg, um die .net-Anwendung zwingen en-us zu benutzen?

Auch was sind die schlechten Auswirkungen, dies zu tun?

Um weiter zu erweitern, da dies als doppelt markiert wurde. ich einen Thread beginnend mit

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

beginnt Dies funktioniert, außer wenn es um diesen Teil des Fadens erreicht

Dim client As WebClient = New WebClient() 
Try 
client.DownloadFile(url, tempName) 
Catch ex As Exception 
!!Ex is still giving the string in German rather than en-us 
End Try 

auch unter Montagehinweise zeigt es „Englisch (USA)“ als Neutrale Sprache.

+0

Ich habe die Frage erweitert. Die Sprache scheint für webclient.downloadfile-Ausnahmen auf den Standardwert zurückgesetzt zu werden. – JohnFrendras

+0

Ihre Frage ist entweder spezifisch für C# _oder VB.NET, oder für beide nicht spezifisch. Bitte entscheide dich. Sie sollten höchstens einen dieser Sprach-Tags haben. Was die Frage selbst betrifft, stelle ich die Weisheit des Parsings des Ausnahmetextes in Frage. Wie dem auch sei, es sieht so aus, als ob Sie 'CurrentUICulture' einstellen, von dem ich nicht erwarte, dass es Ausnahmen betrifft. Hast du es stattdessen versucht, 'CurrentCulture' zu ​​setzen? Bitte stellen Sie eine gute [mcve] bereit, die Ihr Problem zuverlässig reproduziert. –

+0

Wenn das OP C# verwalten kann, kann er beide Tags haben. Stoppen Sie diese Art von unangemessenem "Verbot" von Menschenrechten, denn viele .Net-Programmierer können eine Lösung sowohl für Vb.Net als auch für C# verwalten und akzeptieren. – ElektroStudios

Antwort

1

Scheint, dass Sie versuchen, die Ausnahmebedingungsnachricht in irgendeiner Weise zu analysieren, oder Sie versuchen, es auf Englisch für den Endbenutzer anzuzeigen. In beiden Fällen können Sie diese allgemeine Lösung versuchen, die Nachrichtenausnahme zu versuchen auf die englische Kultur (aus here):

public module ExceptionExtensions 

<DebuggerStepThrough> 
<Extension> 
<EditorBrowsable(EditorBrowsableState.Advanced)> 
Public Function ToEnglish(Of T As System.Exception)(ByVal ex As T) As String 

    Dim oldCI As CultureInfo = Thread.CurrentThread.CurrentUICulture 
    Dim exEng As System.Exception = Nothing 

    Task.Factory.StartNew(Sub() 
           Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en-US") 
           exEng = DirectCast(Activator.CreateInstance(ex.[GetType]), System.Exception) 
           Thread.CurrentThread.CurrentUICulture = oldCI 
          End Sub, 
          TaskCreationOptions.LongRunning).Wait() 

    Return exEng.Message 

End Function 

end module 

Verwendungsbeispiel:

Try 
    Throw New FileNotFoundException 

Catch ex As FileNotFoundException 
    Dim message As String = ex.ToEnglish() 

End Try 

auch sehen my question und/oder die Kommentare unten könnten sie nützlich sein.

+0

Während dies den Fehler in Englisch zurückgibt, bekomme ich "Unable finde die angegebene Datei" unabhängig davon, ob es ein 404 oder eine Auszeit ist. – JohnFrendras

+0

In der Beispielverwendung habe ich eine 'FileNotFoundException' verwendet ...Sie sollten einfach die 'Dim-Nachricht As String = ex.ToEnglish()' in Ihrem 'Catch'-Block Ihrer gewünschten Ausnahme verwenden. – ElektroStudios

+0

oops, natürlich! offensichtlich, jetzt haben Sie darauf hingewiesen. – JohnFrendras

Verwandte Themen