2016-03-28 4 views
2

У меня есть приложение .NET (VB.NET), которое отлично работает, пока кто-то из Германии не попробовал его.Как заставить язык приложения .NET?

Я вижу, что проблема заключается в том, что проблема заключается в перехвате исключений с помощью исключения try catch и разбора строки исключения.

Это прекрасно работает, когда приложение находится на английском языке, но не работает на каком-либо другом языке (очевидно, но я никогда не думал, что он будет иметь такое глобальное использование).

Так что вместо перезаписи всей моей обработки ошибок (с чего начать!) Есть способ заставить приложение .net использовать en-us?

Также каковы плохие последствия этого?

Дальнейшее расширение, поскольку это обозначено как дубликат. Я начинаю нить, которая начинается с

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

Это работает, за исключением, когда он достигает этой части нити

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 

также при информации Ассамблеи он показывает «Английский (США)», как Нейтральный язык.

+0

У меня вопрос расширен. Язык, похоже, возвращается к умолчанию для исключений webclient.downloadfile. – JohnFrendras

+0

Ваш вопрос либо специфичен для C# _or_ VB.NET, либо не является специфическим для любого. Пожалуйста, решите. У вас должен быть только один из этих языковых тегов. Что касается самого вопроса, я сомневаюсь в мудрости разбора текста исключения. Тем не менее, похоже, что вы устанавливаете 'CurrentUICulture', что я не ожидал бы повлиять на исключения. Вы пытались установить «CurrentCulture» вместо этого? Пожалуйста, предоставьте хороший [mcve], который надежно воспроизводит вашу проблему. –

+0

Если OP может управлять C#, то он может иметь оба тега. Остановите такие необоснованные «запрещающие» права людей, пожалуйста, потому что большая часть программистов .Net может управлять и принимать решение как для Vb.Net, так и для C#. – ElektroStudios

ответ

1

Кажется, что вы пытаетесь каким-то образом разобрать сообщение об исключении или пытаетесь показать его на английском языке для конечного пользователя, в обоих случаях вы можете попробовать это общее решение (попробуйте) преобразовать исключение сообщения к английской культуре (взяты из 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 

Пример использования:

Try 
    Throw New FileNotFoundException 

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

End Try 

Кроме того, см my question и/или комментарии ниже, они могут быть полезными.

+0

Хотя это возвращает ошибку на английском языке, Im получает «Невозможно найти указанный файл», независимо от того, является ли оно 404 или тайм-аутом. – JohnFrendras

+0

В примере использования я использовал «FileNotFoundException» ...вы должны просто использовать 'Dim сообщение As String = ex.ToEnglish()' в блоке 'Catch' вашего желаемого исключения. – ElektroStudios

+0

Упс, конечно! очевидно, теперь вы указали это. – JohnFrendras

Смежные вопросы