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

标签 c# .net vb.net localization

我有一个 .NET 应用程序 (VB.NET),它运行良好,直到德国人尝试了它。

我可以看到问题是我使用“try catch exception”捕获异常并解析豁免字符串。

当应用程序是英文的但在任何其他语言中都失败时,这工作正常(很明显,但我从没想过它会在全局范围内使用)。

因此,与其重写我所有的错误处理(从哪里开始!),有没有办法强制 .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

此外,在装配信息下,它显示“英语(美国)”作为中性语言。

最佳答案

似乎您正在尝试以某种方式解析异常消息,或者您正在尝试以英语向最终用户显示它,在这两种情况下,您都可以尝试这种通用解决方案来(尝试)将消息异常转换为英国文化(取自 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 和/或下面的评论,它们可能会有用。

关于c# - 如何强制 .NET 应用程序的语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36270053/

相关文章:

c# - 如何在C# winform中一行显示listview中的文件?

c# - 可移植类库 - 对类型 'MarshalByRefObject' 的引用声称它在 'mscorlib' 中定义,但找不到

c# - 如何在 C# 中创建内联函数

c# - .NET 等同于 Java 线程组?

C# 帮助设置 Grid View 的 Row Css 类

c# - printdialog.showdialog();在 64 位 Windows 7 中不显示打印对话框

.NET Core 在 AzuerAD 身份验证后添加声明

asp.net - asp.net 中的数据屏蔽

vb.net - 收到可能是恶意的 .exe,有​​人可以告诉我攻击者打算做什么吗?

c# - 在 Web 浏览器控件中控制 Excel