【问题标题】:C# application to read in and translate other applications用于读取和翻译其他应用程序的 C# 应用程序
【发布时间】:2011-02-16 04:04:58
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 为什么不直接创建资源程序集?
  • 我实际做的app是传给翻译的,其他语言我不熟悉,一直找朋友帮我翻译,她不熟悉编程,有时我我越来越抱怨翻译与单词的含义不同。因此需要上下文,这就是应用程序的原因。所以她可以直观地翻译这些字符串。

标签: c# reflection translation translation-scheme


【解决方案1】:

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

textBox.Text = GetCorrectText(connection.State);

GetCorrectText 可能如下所示:

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

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

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

  1. TextBox 类的文本属性是显示给用户的字符串
  2. GetCorrectText 方法返回文本,所以需要解析它。
  3. 方法 string.Format 返回文本。现在您要么需要对 string.Format 进行硬编码,它应该使用第一个参数作为显示的文本,要么您必须解析 string.Format 才能了解这一事实。

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

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

【讨论】:

    猜你喜欢
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 2021-07-05
    • 2012-07-02
    相关资源
    最近更新 更多