C# - 当应用程序使用另一种语言时,获取英语的异常消息?

2024-02-02

我正在尝试本地化我的程序,但我希望发送给开发人员的错误消息以英语显示。我一直无法找到一种方法来实现这一点,因为似乎如果在引发错误时将 UI 区域性设置为另一种语言,则会以该语言引发错误。由于这个程序不是我自己编写的,而且它很大,所以我认为在发生错误或可能发生错误时创建新的 try catch 块来尝试将区域性设置回英语是不切实际的。目前,CurrentCulture 和 DefaultThreadCurrentCulture 在整个应用程序中始终设置为英语,而 CurrentUICulture 设置为最终用户的语言。

在我的解决方法中,我目前有一个一直在迭代错误列表的函数(使用 System.Resources.ResourceSets (我假设是 Windows 错误,但我还需要一种方法来查找 .NET 错误,以便我可以迭代这些)。它字符串替换了其他语言中的匹配错误,并将它们替换为相应的英语等效项,以构建大量错误消息,以便在应用程序崩溃时发送给开发人员。实际上,我没有太多要翻译的内容,因为大多数消息是服务器堆栈跟踪并显示抛出异常的位置。最大的问题是转换内部异常消息,有时是主要异常消息,因为有时抛出的错误不会出现在资源集中,有时会使用“{0”等格式项}'。

这是我迄今为止翻译剩余错误的代码。我仍在努力添加正则表达式模式来翻译使用“{0}”等内容的错误,因此如果有人对此有建议或更好的方法来做到这一点,我将不胜感激。

    public static string TranslateExceptionMessageTest(string exmsg, Exception e, CultureInfo currentui)
    {
        CultureInfo test = Thread.CurrentThread.CurrentUICulture;
        string matchingstr = "";
        string newstr = exmsg;
        string resourcecollection = "";

        Assembly a = e.GetType().Assembly;
        ResourceManager rm = new ResourceManager(a.GetName().Name, a);
        ResourceSet rsOriginal = rm.GetResourceSet(currentui, true, true);
        ResourceSet rsTranslated = rm.GetResourceSet(new CultureInfo("en-US"), true, true);
        foreach (DictionaryEntry item in rsOriginal)
        {
            if (exmsg.Contains(item.Value.ToString()))
            {
                if (item.Key.ToString() == "Word_At") // sometimes with spanish errors this replaces words containing the letters 'en' with 'at'.
                {
                    string newat = "   " + item.Value.ToString() + " "; // this is the formatting the word 'at' appears with, in any culture I've tested.
                    matchingstr = "   " + rsTranslated.GetString(item.Key.ToString(), false) + " ";
                    newstr = newstr.Replace(newat, matchingstr);
                }
                else
                {
                    matchingstr = rsTranslated.GetString(item.Key.ToString(), false);
                    newstr = newstr.Replace(item.Value.ToString(), matchingstr);
                }
            }
            resourcecollection = resourcecollection + Environment.NewLine + "Key: " + item.Key.ToString() + Environment.NewLine + "Value: " + item.Value.ToString();
        }
        return newstr; // success
    }

我也尝试过使用这里发布的方法(异常消息是英文的吗? https://stackoverflow.com/questions/209133/c-sharp-exception-messages-in-english)但运气不佳。我仍然得到相同的本地化错误消息。这是我知道抛出错误的代码,但 catch 块似乎没有做任何事情来改变语言。我的 ExceptionLogger 类的设置方式与 Stackoverflow 示例中的方式相同,只是添加了一行将错误写入文件。该错误是在 wcf.Client.Ping() 处引发的(我不关心实际的错误。我用它来测试)。

 private void PreloadWcfDlls(object state)
 {
        if (Global.Inst.ServerMode == ApplicationServerMode.Unknown)
            return;

        try
        {
            using (var wcf = ClientGrabber.GetSchemaClient(Global.Inst.ServerMode))
            {
                wcf.Client.Ping();
            }
        }
        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();
        }
 }

如果没有别的,有没有办法获得英语和其他语言的所有可能的 .NET Framework 错误的列表?我可以访问一个类来从我的程序或其他地方的列表中获取这些内容吗?我尝试过查看 unlocalize.com 和 finderr.net 等网站,但我真的不想编写一些内容来爬行所有页面以查找每个可能的错误。

抱歉,如果我完全遗漏了一些东西。我对 C# 和一般编程还很陌生,这个问题让我有点抓狂!

编辑:我忘了补充一点,我宁愿避免这样的解决方案,您必须不断更改 CurrentUICulture:

强制例外语言为英语 https://stackoverflow.com/questions/2092298/force-exceptions-language-in-english

防止异常消息被翻译成用户的语言? https://stackoverflow.com/questions/197127/prevent-exception-messages-from-being-translated-into-the-users-language

或者是删除语言包或用户计算机上的某些内容的解决方案,或者只是在调试时将错误设置为英语(如果应用程序崩溃并且他们正在使用另一个应用程序,这些错误日志也将从最终用户计算机发送)我们需要用英语记录错误)。

另外,我知道我可以用 google 搜索错误消息,或者使用 unlocalize.com 或 finderr.net 来翻译消息,但我认为其他开发人员如果必须这样做的话可能会杀了我,哈哈。我想如果情况更糟的话我可以查询 unlocalize 网站吗?但看起来确实很痛苦。


Here https://stackoverflow.com/questions/209133/c-sharp-exception-messages-in-english你可以找到问题的解决方案。长话短说:

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
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# - 当应用程序使用另一种语言时,获取英语的异常消息? 的相关文章

  • 提交后禁用按钮

    当用户提交付款表单并且发布表单的代码导致 Firefox 中出现重复发布时 我试图禁用按钮 去掉代码就不会出现这个问题 在firefox以外的任何浏览器中也不会出现这个问题 知道如何防止双重帖子吗 System Text StringBui
  • ClickOnce 应用程序错误:部署和应用程序没有匹配的安全区域

    我在 IE 中使用 FireFox 和 Chrome 的 ClickOnce 应用程序时遇到问题 它工作正常 异常的详细信息是 PLATFORM VERSION INFO Windows 6 1 7600 0 Win32NT Common
  • 在 LINQ 中按 Id 连接多表和分组

    我想按categoryId显示列表产品的名称组 这是我的代码 我想要我的视图显示结果 Desktop PC HP Red PC Dell Yellow PC Asus Red SmartPhone Lumia 720 Blue 我的组模型
  • 错误:表达式不产生值

    我尝试将以下 C 代码转换为 VB NET 但在编译代码时出现 表达式不产生值 错误 C Code return Fluently Configure Mappings m gt m FluentMappings AddFromAssemb
  • 单个对象的 Monogame XNA 变换矩阵?

    我读过一些解释 XNA Monogame 变换矩阵的教程 问题是这些矩阵应用于 SpriteBatch Begin matrix 这意味着所有 Draw 代码都将被转换 如何将变换矩阵应用于单个可绘制对象 就我而言 我想转换滚动背景 使其自
  • 获取两个工作日之间的天数差异

    这听起来很简单 但我不明白其中的意义 那么获取两次之间的天数的最简单方法是什么DayOfWeeks当第一个是起点时 如果下一个工作日较早 则应考虑在下周 The DayOfWeek 枚举 http 20 20 5B1 5D 3a 20htt
  • 将 Word 文档另存为图像

    我正在使用下面的代码将 Word 文档转换为图像文件 但是图片显得太大 内容不适合 有没有办法渲染图片或将图片保存到合适的尺寸 private void btnConvert Click object sender EventArgs e
  • 在 C 中初始化变量

    我知道有时如果你不初始化int 如果打印整数 您将得到一个随机数 但将所有内容初始化为零似乎有点愚蠢 我问这个问题是因为我正在评论我的 C 项目 而且我对缩进非常直接 并且它可以完全编译 90 90 谢谢 Stackoverflow 但我想
  • 是否有实用的理由使用“if (0 == p)”而不是“if (!p)”?

    我倾向于使用逻辑非运算符来编写 if 语句 if p some code 我周围的一些人倾向于使用显式比较 因此代码如下所示 if FOO p some code 其中 FOO 是其中之一false FALSE 0 0 0 NULL etc
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • 标准化 UTF-8 到底是什么?

    The 重症监护室项目 http userguide icu project org transforms normalization 现在也有一个PHP库 http us php net manual en class normalize
  • 具有交替类型的可变参数模板参数包

    我想知道是否可以使用参数包捕获交替参数模式 例如 template
  • 如何检测表单的任何控件的变化?

    如何检测 C 中表单的任何控件的更改 由于我在一个表单上有许多控件 并且如果表单中的任何控件值发生更改 我需要禁用按钮 我正在寻找一些内置函数 事件处理程序 属性 并且不想为此创建自定义函数 不 我不知道任何时候都会触发任何事件any控制表
  • 如何禁用 fread() 中的缓冲?

    我正在使用 fread 和 fwrite 读取和写入套接字 我相信这些函数用于缓冲输入和输出 有什么方法可以在仍然使用这些功能的同时禁用缓冲吗 Edit 我正在构建一个远程桌面应用程序 远程客户端似乎 落后于服务器 我不知道可能是什么原因
  • 外键与独立关系 - Entity Framework 5 有改进吗?

    我读过了several http www ladislavmrnka com 2011 05 foreign key vs independent associations in ef 4 文章和问题 https stackoverflow
  • 等待进程释放文件

    我如何等待文件空闲以便ss Save 可以用新的覆盖它吗 如果我紧密地运行两次 左右 我会得到一个generic GDI error
  • AES 128 CBC 蒙特卡罗测试

    我正在 AES 128 CBC 上执行 MCT 如中所述http csrc nist gov groups STM cavp documents aes AESAVS pdf http csrc nist gov groups STM ca
  • 如何设置 log4net 每天将我的文件记录到不同的文件夹中?

    我想将每天的所有日志保存在名为 YYYYMMdd 的文件夹中 log4net 应该根据系统日期时间处理创建新文件夹 我如何设置它 我想将一天中的所有日志保存到 n 个 1MB 的文件中 我不想重写旧文件 但想真正拥有一天中的所有日志 我该如
  • 为什么 gcc 抱怨“错误:模板参数 '0' 的类型 'intT' 取决于模板参数”?

    我的编译器是gcc 4 9 0 以下代码无法编译 template
  • 如何从 ODBC 连接获取可用表的列表?

    在 Excel 中 我可以转到 数据 gt 导入外部数据 gt 导入数据 然后选择要使用的数据源 然后在提供登录信息后 它会给我一个表格列表 我想知道如何使用 C 以编程方式获取该列表 您正在查询什么类型的数据源 SQL 服务器 使用权 看

随机推荐

  • 加密 JWT 安全令牌支持的算法

    我正在尝试使用以下代码片段对我的 JWt 进行签名和编码 var claims new Claim new SomeClaimes var scKey Encoding UTF8 GetBytes SOME KEY var ecKey En
  • 从单个单词中获取所有可能的词性标签

    我目前正在尝试使用 Python 获取单个单词的所有可能的 pos 标签 从传统的词性标注器中 如果您输入单个单词 您只能返回一个标签 有没有办法获得所有的可能性 是否可以在语料库 例如 Brown 中搜索特定单词而不仅仅是类别 亲切的问候
  • 在 Javascript 中处理多个图像后备

    有没有办法在纯 Javascript 或 React 中处理多个图像回退 我知道我们可以处理一张后备图像onError 如果我们想做另一个后备图像怎么办 提前致谢 每次设置导致错误的 src 时 都会调用图像的 onerror 回调 因此
  • 如何使用 Pipe 和 purrr 获取列表名称和切片名称

    我想知道在使用 purrr 的管道操作时如何获取列表名称或组名称作为标志 例如 我想使用传递给 ggsave 函数的每个列表名称的动态参数 require purrr require ggplot2 lst list a1 data fra
  • 在复杂的 React 组件中查找重复的键

    我有一个反应组件 它一次生成许多键 我不确定哪个不是唯一的 错误如下 有什么简单的方法可以帮助调试吗 谢谢 React js 19500 警告 数组或迭代器中的每个子项都应该有一个唯一的 key 属性 检查渲染方法MyGrid 请参阅 ht
  • Java支持关联数组吗? [复制]

    这个问题在这里已经有答案了 我想知道Java中的数组是否可以做这样的事情 int a new int 10 a index0 100 a index1 100 我知道我在其他语言中看到过类似的功能 但我不太熟悉任何细节 只是有一些方法可以将
  • 如何在窗口调整大小时更改高度 div?

    我的网站上有一个 div 应该是窗口的高度 这就是我得到的 document ready function var bodyheight document height sidebar height bodyheight 但是 当调整窗口大
  • 给定 AWS 访问/密钥对,如何检索其 IAM 权限?

    给定一个 AWS 访问密钥和一个 AWS 密钥的输入 我如何使用 AWS 开发工具包查找该账户可以执行哪些权限 我想为客户执行 XYZ 因此客户需要向我提供访问密钥和秘密密钥 以便以编程方式执行 XYZ 但是 在尝试执行任何这些操作之前 我
  • 模仿 msbuild 进程的程序集解析

    我正在编写一个验证工具 用于检查项目中引用的文件的版本 我想使用与 MSBuild 相同的解析过程 例如 Assembly Load 需要完全限定的程序集名称 然而 在项目文件中 我们可能只有 System Xml 之类的东西 MSBuil
  • 如何替换窗口中的文档?

    var newDoc document implementation createHTMLDocument someTitle swap newDoc with document DOMImplementation createHTMLDo
  • Java使用notepad++和nppexec编译运行

    请记住 在 Windows shell 中进行编译是有效的 因此此问题成为 PATH 问题的可能性很小 如果不是零 我花了很多时间研究如何做到这一点 我在网上找到的所有结果都表明你可以这样做 NPP SAVE javac FILE NAME
  • 使用 Elastic Beanstalk 部署 .NET 工作线程应用程序

    我正在使用 AWS 基础设施开发更广泛的 Web 应用程序 它有两个 工作 组件 从 SQS 读取工作并将结果写入 RDS 数据库 其中之一是 Python 我已经在单个 Elastic Beanstalk 实例上使用了它 第二个使用 NE
  • *** 检测到堆栈粉碎 ***:<未知> 终止中止(核心转储) 错误仅有时发生?

    我正在完成作业 因此我无法发布代码 并且很少出现此运行时错误 检测到堆栈粉碎 终止 中止 核心转储 当我再次运行可执行文件后 一切正常 是否有原因导致此错误仅有时出现 作为参考 我试图完成的作业要求我们将文件中的数据加载到两个向量中 并对数
  • AngularJS 和 Websocket

    我正在尝试学习 HTML5 Node js Express MongoDB AngularJS Websocket 的东西 这似乎让每个人现在都很兴奋 稍微适得其反的是 我实际上很难区分每种技术的实际用途 尤其是使用 ejs 作为模板引擎
  • 使用 if 条件更新 MySQL

    看来我有很大的问题条件查询 我必须做一个有条件更新 我在这里写下我想做的事情 IF SELECT tipo FROM abbonamento WHERE idU 17 punti THEN UDPATE abbonamento SET pu
  • 导出-导入 Android Studio AVD

    我一直在 Android Studio 中进行开发 并创建了许多适合我不同应用规范的 AVD 现在我计划在我的电脑上进行系统还原 有没有办法备份 AVD 然后在执行系统还原后将它们导入到新的 Android Studio 安装中 Thank
  • R 命令 dir.create 和 file.path

    我刚刚开始学习 r 并对课程中给出的以下问题感到困惑 使用 dir create 和 file path 在一个命令中在当前工作目录中创建一个名为 testdir2 的目录及其子目录 名为 testdir3 我无法让它接受我的答案 然后在网
  • jRails 替代方案

    你知道 jrails 的替代品吗 它或多或少已经过时了 使用 jQuery 1 5 现在 1 7 是当前版本 有人知道替代方案吗 Thanks EDIT 我知道如何单独使用jquery构建rails助手 但我喜欢rails助手 所以我不想单
  • 如何从文件描述符获取 FILE* 流?

    我们可以使用以下方法从 FILE 流中获取文件描述符fileno 功能 是否有一个函数可以从文件描述符获取 FILE 流而无需重新打开文件 FILE fdopen int fd const char mode See fdopen 3 但它
  • C# - 当应用程序使用另一种语言时,获取英语的异常消息?

    我正在尝试本地化我的程序 但我希望发送给开发人员的错误消息以英语显示 我一直无法找到一种方法来实现这一点 因为似乎如果在引发错误时将 UI 区域性设置为另一种语言 则会以该语言引发错误 由于这个程序不是我自己编写的 而且它很大 所以我认为在