3

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

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

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

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

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

4

1 回答 1

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 才能了解这一事实。

该示例显示了其他内容:您将无法翻译正在显示的整个字符串,因为其中一部分是枚举值的名称。

我想告诉你的是,你需要做出取舍。

于 2011-02-17T10:57:27.803 回答