为了账号安全,请及时绑定邮箱和手机立即绑定

英文异常消息?

英文异常消息?

繁星淼淼 2019-07-25 20:08:10
英文异常消息?我们通过将Exception.Message写入文件来记录系统中发生的任何异常。但是,它们是在客户的文化中写成的。而土耳其的错误对我来说意义不大。那么如何在不改变用户文化的情况下用英语记录任何错误消息呢?
查看完整描述

3 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

这个问题可以部分解决。Framework异常代码根据当前线程区域设置从其资源加载错误消息。在某些例外情况下,这会在访问Message属性时发生。

对于这些例外情况,您可以通过在记录时将线程区域设置简单地切换到en-US来获取完整的美国英语版本的消息(事先保存原始用户区域设置并在之后立即恢复)。

在单独的线程上执行此操作甚至更好:这可确保不会产生任何副作用。例如:

try{
  System.IO.StreamReader sr=new System.IO.StreamReader(@"c:\does-not-exist");}catch(Exception ex){
  Console.WriteLine(ex.ToString()); //Will display localized message
  ExceptionLogger el = new ExceptionLogger(ex);
  System.Threading.Thread t = new System.Threading.Thread(el.DoLog);
  t.CurrentUICulture = new System.Globalization.CultureInfo("en-US");
  t.Start();}

ExceptionLogger类看起来像:

class ExceptionLogger{
  Exception _ex;

  public ExceptionLogger(Exception ex)
  {
    _ex = ex;
  }

  public void DoLog()
  {
    Console.WriteLine(_ex.ToString()); //Will display en-US message
  }}

但是,正如Joe在对此回复的早期修订版的评论中正确指出的那样,在抛出异常时已经(部分)从语言资源加载了一些消息。

例如,这适用于抛出ArgumentNullException(“foo”)异常时生成的消息的'parameter not not null'部分。在这些情况下,即使使用上述代码,消息仍将显示(部分)本地化。

除了使用不切实际的黑客之外,例如在开始使用en-US语言环境的线程上运行所有非UI代码,似乎没有太多可以做的事情:.NET Framework异常代码没有用于覆盖错误消息区域设置的工具。


查看完整回答
反对 回复 2019-07-25
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

也许是一个有争议的观点,但en-US您可以将其设置为,而不是将文化设置为Invariant。在Invariant文化中,错误消息是英文的。

Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;

它具有不偏见的优点,特别是对于非美国英语区域。(又避免同事的讽刺言论)


查看完整回答
反对 回复 2019-07-25
  • 3 回答
  • 0 关注
  • 561 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信