如何防止异常信息被翻译成用户的语言?

35
如何使我的应用程序在显示win32/.net异常信息时始终使用英语?
我收到了这条消息,看起来像是有人用babelfish将其翻译成了瑞典语: “System.ComponentModel.Win32Exception:Programmet kunde inte starta eftersom programmets sida-vid-sidakonfiguration är felaktig。”
这非常没用,谷歌只有4个点击量,都没有帮助。所以我必须猜测原始信息是什么,并在谷歌上搜索。(它是:“应用程序无法启动,因为其并行配置不正确。”)
这次找出原始错误信息相当简单,从一开始就将消息显示为英语当然可以节省我的时间。
那么我该怎么做呢?

重复问题:英文异常信息? 我知道,这个问题在此之前已经被问过了3天,但我投票关闭了它,因为另一个线程似乎更受关注,并且有更新的答案。 - Martin Schneider
4个回答

10
你可以尝试将Thread.CurrentThread.CurrentUICulture和/或.CurrentCulture设置为CultureInfo("en-US")

4
如果您更改CurrentCulture,那么不会更改小数分隔符、字符串排序、货币符号、日期格式等内容吗? 这将严重影响您的外国用户,并引起他们的不满。 - MarkJ
1
这是完整的代码行: System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-US"); - epotter
2
除了更改文化(因为它可能被应用程序设置为翻译目的)之外,是否还有其他可能性?但是异常不应该被翻译。是否有任何包可以在 .Net 安装中删除? - Juri
1
将此代码放在异常记录之前并没有帮助,它仍然记录了一个翻译后的消息。 - Janusz Skonieczny
这并不是所有情况下都有用的。我尝试过,有些异常被翻译了,有些似乎只来自本地化框架... - Offler

2
如果是ASP.NET应用程序,您可以在web.config(*)中设置用户界面语言。
<system.web>
    <globalization ... uiCulture="en-US" ... />
</system.web>

对于其他应用程序,默认使用当前用户的区域设置,您必须明确地覆盖它 - 例如Thread.CurrentUICulture = new CultureInfo("en-US")。
(*)警告 - 如果配置文件中的错误导致在处理元素之前抛出异常,则会获得默认的uiCulture。

2
强制异常信息以不同的语言显示对用户来说有点过分了...你能够在消息旁边展示一个错误代码吗?这样用户就可以理解到一些内容,而你也可以查找翻译版本的错误代码。
我不是.NET方面的人,所以我不知道这是否可行,这只是一个想法。

6
我是那条消息的接收者,而不是用户,即使错误消息用他们的语言写出来,他们也可能不理解。 任何用户都不应该看到异常抛出,所以我必须捕获并修复它。在我能理解之前,我得把它从瑞典语翻译成英语。 - Nifle

0
如何让我的应用程序在显示win32/.net异常消息时始终使用英语?
首先,不要向用户显示win32/.net异常消息。您应该处理异常而不是向用户显示它们。
默认情况下,异常消息将显示在当前的UI语言中(如果安装了适当的语言包,否则它们会回退到英语)。您可以更改Thread.CurrentThread.CurrentUICulture属性来更改异常消息,但这将影响您应用程序的整个GUI。

这个应用程序仍在测试中,所以我认为向测试人员显示一些异常是可以的。毕竟他的目的就是找到它们。 我使用外部的 CSV 语言文件来存储所有的文本字符串,所以希望更改 UICulture 不会影响用户。 - Nifle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接