我正在尝试构建一个可以读取其他已编译的C#应用程序(.exe)的翻译助手,并显示EXE中的表单,单独显示,旁边有一个表格,英文列将显示显示当前的英语单词,以及翻译者可以输入的另一列值。翻译完成后,翻译人员可以将翻译文件导出为resx文件,添加到项目中,也可以作为excel文件进行记录。
我是C#的新手,因此我不确定我的结构是否正确,我设计的是在编译器中将dll插入到.exe中,然后使用此dll,翻译应用程序可以提取字符串。这适用于大多数字符串,但它会卡在有几个字符串可以在不同时间在同一文本框中出现的地方[例如断开连接,连接等]。我尝试过到处搜索,但是我无法找到有关如何从应用程序中提取所有字符串的信息,并且能够识别它们属于哪种形式,以便创建我的应用程序?
我面临的另一个问题是,实际上显示已翻译的字符串,我正在构建的应用程序如果能够显示翻译后的字符串看起来的示例,则会有很大的好处,因为某些语言的翻译可能会过长。但我发现我只能阅读已编译的应用程序的方面并创建一个实例,但我无法翻译它。
我正在使用Reflection阅读exe,并从网上了解到我需要使用reflection.emit来修改表单。但是我发现每个从表单中识别的sting都被提取为一个实例,因此更改字符串只会改变字符串的实例,而不是表单本身的实例。因此我无法做出正确的展示。
我已经尝试了3个星期来解决最后两个问题,感谢您提前帮助我解决这个问题。
答案 0 :(得分:0)
我认为您无法通过文本框中显示的文本找到问题的一般解决方案。原因如下:
如果文本在资源文件中,您可以阅读它们,但您仍然不知道它们的使用位置。您需要对源代码进行复杂的分析才能知道文本的显示位置。想象一下这个小场景:
textBox.Text = GetCorrectText(connection.State);
GetCorrectText可能如下所示:
string GetCorrectText(ConnectionState state)
{
return string.Format(Resources.ConnectionState, state);
}
Resources.ConnectionState可能是“连接处于状态{0}”。
这是一个简单的例子,但你需要知道或提取很多东西:
该示例显示了其他内容:您将无法翻译正在显示的整个字符串,因为它的一部分是枚举值的名称。
我想告诉你的是你需要做出权衡。