C#应用程序读入并转换其他应用程序

时间:2011-02-16 04:04:59

标签: c# reflection translation translation-scheme

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

我是C#的新手,因此我不确定我的结构是否正确,我设计的是在编译器中将dll插入到.exe中,然后使用此dll,翻译应用程序可以提取字符串。这适用于大多数字符串,但它会卡在有几个字符串可以在不同时间在同一文本框中出现的地方[例如断开连接,连接等]。我尝试过到处搜索,但是我无法找到有关如何从应用程序中提取所有字符串的信息,并且能够识别它们属于哪种形式,以便创建我的应用程序?

我面临的另一个问题是,实际上显示已翻译的字符串,我正在构建的应用程序如果能够显示翻译后的字符串看起来的示例,则会有很大的好处,因为某些语言的翻译可能会过长。但我发现我只能阅读已编译的应用程序的方面并创建一个实例,但我无法翻译它。

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

我已经尝试了3个星期来解决最后两个问题,感谢您提前帮助我解决这个问题。

1 个答案:

答案 0 :(得分:0)

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

textBox.Text = GetCorrectText(connection.State);

GetCorrectText可能如下所示:

string GetCorrectText(ConnectionState state)
{
    return string.Format(Resources.ConnectionState, state);
}

Resources.ConnectionState可能是“连接处于状态{0}”。

这是一个简单的例子,但你需要知道或提取很多东西:

  1. TextBox类的text属性是向用户显示的字符串
  2. 方法GetCorrectText返回文本,因此您需要解析它。
  3. Method string.Format返回文本。现在你要么需要对string.Format进行硬编码,它应该使用第一个参数作为显示的文本,或者你必须解析string.Format以了解这一事实。
  4. 该示例显示了其他内容:您将无法翻译正在显示的整个字符串,因为它的一部分是枚举值的名称。

    我想告诉你的是你需要做出权衡。