防止异常消息被翻译成用户的语言?
Posted
技术标签:
【中文标题】防止异常消息被翻译成用户的语言?【英文标题】:Prevent exception messages from being translated into the user's language? 【发布时间】:2010-09-16 20:42:36 【问题描述】:如何让我的应用程序在显示 win32/.net 异常消息时始终使用英文?
我收到了这条消息,好像有人用 babelfish 来翻译它(它是瑞典语): “System.ComponentModel.Win32Exception: Programmet kunde inte starta eftersom programts sida-vid-sidakonfiguration är felaktig。”
非常无用,Google 获得了高达 4 次点击,但都没有帮助。 所以我必须猜测原始消息是什么,然后用谷歌搜索。 (它是:“应用程序无法启动,因为它的并排配置不正确。”)
这次很容易找出原来的错误消息是什么,从一开始就用英文显示消息当然可以节省我的时间。
那我该怎么做呢?
【问题讨论】:
【参考方案1】:您可以尝试将Thread.CurrentThread.CurrentUICulture
和/或.CurrentCulture
设置为CultureInfo("en-US")
。
【讨论】:
如果你改变CurrentCulture,不会改变小数分隔符、字符串排序、货币符号、日期格式等吗?这会严重惹恼您的外国用户 这是完整行:System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-US"); 除了更改文化之外还有其他可能性吗,因为这可能由应用程序设置用于翻译目的。但是,不应翻译例外情况。 .Net 安装中是否有要删除的包?? 将这段代码放在记录异常之前没有帮助,它仍在记录翻译的消息。 这并不适用于所有情况。我试了一下,有些异常被翻译了,有些似乎只是来自本地化框架……【参考方案2】:不应该翻译异常的更多原因(很糟糕)。 记录异常时,使用单一语言更有意义。我不敢相信微软没有想到除了 UICulture 之外的其他方法,这基本上是一个不可选项:(
【讨论】:
情况更糟。 UICulture 并非在所有情况下都有效。您可以尝试在线程中设置它,对于某些异常它可以工作,对于其他异常它不会(atm。我在我的语言中遇到异常,想将其设置为英语以获取日志文件,但还没有找到解决方案在所有情况下都有效。)【参考方案3】:如果是 ASP.NET 应用程序,可以在 web.config (*) 中设置 UI 语言:
<system.web>
<globalization ... uiCulture="en-US" ... />
</system.web>
对于其他应用程序,默认使用当前用户的区域设置,您必须明确覆盖它 - 例如Thread.CurrentUICulture = new CultureInfo("en-US").
(*) 警告 - 如果配置文件中的错误导致在处理元素之前引发异常,您将获得默认的 uiCulture。
【讨论】:
【参考方案4】:强制异常以不同的语言显示对用户来说似乎有点苛刻...您可以在消息中显示错误代码吗?然后用户会得到他们能理解的东西,你可以查找翻译版本的错误代码。
我不是 .net 人,所以我不知道这是否可能,只是一个想法。
【讨论】:
我是该消息的接收者,而不是用户,即使是他们的语言,他们也可能无法理解错误消息。任何用户都不应该看到抛出的异常,所以我必须抓住它并修复它。我必须先把它从瑞典语翻译成英语才能听懂。【参考方案5】:如何让我的应用程序始终 显示win32/.net时使用英文 异常消息?
首先,不要向用户显示 win32/.net 异常消息。您应该处理异常而不是向用户显示它们。
默认情况下,异常消息将以当前的 UI 语言显示(如果安装了适当的语言包,否则它们会回退到英语)。您可以通过更改 Thread.CurrentThread.CurrentUICulture 属性来更改异常消息,但它会影响您应用的整个 GUI。
【讨论】:
此应用程序仍在测试中,因此我认为向测试人员显示的一些异常情况是可以的。毕竟,他的目的是找到他们。我对所有文本字符串都使用了外部 csv 语言文件,因此希望更改 UICulture 不会影响用户。以上是关于防止异常消息被翻译成用户的语言?的主要内容,如果未能解决你的问题,请参考以下文章