如何强制.NET应用程序的语言?

时间:2016-03-28 19:56:10

标签: c# .net vb.net localization

我有一个.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

另外,根据大会信息显示"英语(美国)"作为中立语言。

1 个答案:

答案 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 和/或以下评论,它们可能会有用。