我有一个.NET应用程序(VB.NET)工作正常,直到有德国人尝试过它。
我可以看到问题是我正在捕捉异常"尝试捕获豁免"并解析豁免字符串。
当应用程序使用英语但是在任何其他语言中失败时,这种方法很好(显而易见,但我从未想过它会有这样的全局用途)。
所以不是重写我的所有错误处理(从哪里开始!)有没有办法强制.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 :(得分: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 和/或以下评论,它们可能会有用。