C#读入和翻译其他应用程序的应用程序

C#读入和翻译其他应用程序的应用程序,c#,reflection,translation,translation-scheme,C#,Reflection,Translation,Translation Scheme,我正在尝试构建一个翻译助手,它可以读入其他已编译的C#应用程序(.exe),并显示exe中的表单,单独显示,旁边还有一个表,其中的英文列将显示当前显示的英文单词,另一列是值,翻译人员可以输入。翻译完成后,翻译人员可以将翻译导出到resx文件中,以添加到项目中,也可以作为excel文件进行记录 我是C#新手,因此不确定我的结构是否正确,我在中设计了一个dll,在编译期间将其插入.exe,然后使用此dll,翻译应用程序可以提取字符串。这适用于大多数字符串,但在同一文本框中有多个字符串可以在不同时间出

我正在尝试构建一个翻译助手,它可以读入其他已编译的C#应用程序(.exe),并显示exe中的表单,单独显示,旁边还有一个表,其中的英文列将显示当前显示的英文单词,另一列是值,翻译人员可以输入。翻译完成后,翻译人员可以将翻译导出到resx文件中,以添加到项目中,也可以作为excel文件进行记录

我是C#新手,因此不确定我的结构是否正确,我在中设计了一个dll,在编译期间将其插入.exe,然后使用此dll,翻译应用程序可以提取字符串。这适用于大多数字符串,但在同一文本框中有多个字符串可以在不同时间出现的情况下(例如断开连接、已连接等)会被卡住。我尝试到处搜索,但我无法找到有关如何从应用程序中提取所有字符串的信息,以及如何识别它们所属的表单,以便创建我的应用程序

我面临的另一个问题是,实际显示翻译后的字符串,如果我正在构建的应用程序能够显示翻译后的字符串的外观,那么它将非常有益,因为某些语言的翻译可能非常长。但我发现,我只能读入已编译应用程序的各个方面并创建一个实例,但无法翻译它

我正在使用Reflection阅读exe,并从网上了解到我需要使用Reflection.emit来修改表单。但是我发现从表单中标识的每个sting都被提取为一个实例,因此更改字符串只是更改字符串的实例,而不是表单本身的实例。因此,我无法如此正确地显示


我已经试了三个星期来解决最后两个问题,提前谢谢你帮我解决这个问题

我认为,对于文本框中可能出现的文本,您无法找到解决问题的通用方法。原因如下:
如果文本在资源文件中,您可以阅读它们,但您仍然不知道它们在哪里使用。您需要对源代码进行复杂的分析,才能知道文本显示在哪里。想象一下这个小场景:

textBox.Text = GetCorrectText(connection.State);
GetCorrectText可能如下所示:

string GetCorrectText(ConnectionState state)
{
    return string.Format(Resources.ConnectionState, state);
}
Resources.ConnectionState可能是“连接处于状态{0}”

这是一个简单的例子,但您需要了解或提取很多信息:

  • TextBox类的text属性是显示给用户的字符串
  • GetCorrectText方法返回文本,因此需要对其进行解析
  • 方法string.Format返回文本。现在,您需要为string.Format硬编码,它应该使用第一个参数作为显示的文本,或者您需要解析string.Format来了解这一事实
  • 该示例还显示了一些其他内容:您将无法转换正在显示的整个字符串,因为其中一部分是枚举值的名称


    我想向您展示的是,您需要做出权衡。

    为什么不创建资源程序集呢?我正在制作的实际应用程序是将其传递给翻译人员,我不熟悉其他语言,一直在请朋友为我翻译,她不熟悉编程,有时我也会收到抱怨,说翻译的意思和单词的意思不一样。因此,nead的上下文,这就是为什么应用程序。这样她就可以直观地翻译字符串了。