VB 6源代码,语音文本在法语中想翻译成英文

时间:2011-06-05 23:07:36

标签: vb6

我有一个对我有用的程序,但文档和所有工具提示都是我无法阅读的语言。源代码可用,整个过程大约有84,000行代码。我的问题是,是否有一种方法可以导出或抓取工具提示文本,按钮文本,最终用户在任何可读消息中显示的内容,以便轻松翻译文本?

5 个答案:

答案 0 :(得分:1)

一种可能的方法是使用知道如何转换VB6程序的东西。它需要解析VB6,拉出所有文字文本字符串,提供给你翻译,并用你的替换代替原始字符串。实际上,你需要两个传递,第一个产生一个集合,使你能够翻译感兴趣的,第二个来代替你指定的翻译,如果有的话。您可能需要进行一些调试,因为通常会有一些东西取决于字符串大小。

如何将字符串从一种语言转换为另一种语言取决于您。正如其他海报所建议的那样,您可以使用在线翻译并获取您所获得的内容。如果你有一个人,我希望你会做得更好。它们通常只需要关注字符串的含义,因为它们是从代码中提取的,但是您也会发现转换取决于代码的作用,因此程序员需要参与其中。

我们的DMS Software Reengineering Toolkit及其Visual Basic Front End可以轻松配置为执行此操作。 DMS提供通用的解析和转换机制; VB前端提供了有关Visual Basic 6的详细信息(在您的情况下)。

这个想法的一个变体是用引用“资源”(相当于由字符串编号索引的查找表)替换翻译的文字字符串,其中包含原始(法语)或新(英语)。这种解决方案产生的东西接近人们做国际化的想法。 (这不会考虑日期和货币格式;那些需要数据流分析来确定导致/来自日期或货币操作的计算。虽然文字字符串转换不需要,但DMS提供流量分析,因此可以配置为执行这也是。)

如果您有关于文本中字符串位置的精确信息(例如,起始行/列,结束行/列),您可以采用另一种方式:使用该精确信息提取字符串,然后使用重新插入翻译的相同精确信息。为了避免损坏字符串位置,您应该首先从每个文件的末尾开始替换字符串,然后在文件中向后工作。这应该可以直接在文本缓冲区上进行。

我们的Source Code Search Engine (SCSE)可用于轻松查找此类字符串及其位置。 SCSE根据其词法结构索引源代码(因此完全看到字符串文字),然后所有允许跨源代码查询任意序列的标记。它使用DMS的语言前端(为了您的目的,VB6前端)准确地挑选出词汇。

有人可能会寻找一个为一个变量分配超过10(使用范围约束)的变量的名称,该变量的名称包含X(使用通配符),并带有如下查询:

 I=*x* '=' N>10

SCSE将找到所有匹配项,显示匹配项,并通过一次单击启用查看源代码中的匹配项。

您要查找文字字符串的查询非常简单:

 S=*

意思是“找不到内容的所有字符串”。您可以打开SCSE日志记录,它会将所有匹配的列表以及精确的位置写入日志文件。在这一点上,您拥有所有精确的字符串信息。 (SCSE不能进行流量分析,所以它无法帮助国际化日期以及DMS可以,但它可以找到

 N 'mod' 4 '==' 0 

模式,往往是闰年调整。)

答案 1 :(得分:0)

我没有完美的建议,但它可能是你最好的镜头:使用文档翻译并让自己亲近。然后编译新的源代码,看看有什么中断。很可能它会忽略那些不正确的词(比如btnOK等)

有很多网站都使用谷歌翻译。这是我选择的一个随机的:

http://www.onlinedoctranslator.com/

如果您想构建自己的翻译器,可以查看此CodeProject文章:

http://www.codeproject.com/KB/IP/GoogleTranslator.aspx

我知道这不在您的初始问题的范围内,但由于使用翻译器可能是您的最佳选择,也许您可​​以构建一些东西以使其更好地工作。

答案 2 :(得分:0)

一个选项是

答案 3 :(得分:0)

只是我的2c。源代码文本的自动翻译非常有问题。基本上,它只是不能很好地工作。为什么不?语境。要使自动翻译器运行良好,它必须具有一定的上下文。但是当你谈论源代码文本时,你会谈论一些文本片段,这些片段要么没有明显的上下文,要么通过代码串联在一起,因此会松开它们的上下文。

你会从自动翻译中获得“某些东西”,但它几乎可以保证让母语使用者发出讽刺,或者2)抓住他们的头脑,想知道按钮标题意味着什么......

答案 4 :(得分:0)

如果你打开一个VB6 .frm文件,你会在顶部看到所有表单控件,如下摘录:

Begin VB.Frame frShipmentDetails 
  BackColor       =   &H00FFC0C0&
  Caption         =   "Shipment Details by Part"
  BeginProperty Font 
     Name            =   "Verdana"
     Size            =   9.75
     Charset         =   0
     Weight          =   700
     Underline       =   0   'False
     Italic          =   0   'False
     Strikethrough   =   0   'False
  EndProperty
  ForeColor       =   &H000000C0&
  Height          =   2895
  Left            =   480
  TabIndex        =   28
  Top             =   6960
  Width           =   10935

请注意,它只是一个名称/值对。在VB6中,您通常会寻找CaptionToolTip等属性。一个简单的grep将为您提供一个好的开始列表。如果需要,您可以通过一些自动技术翻译器运行结果,或者将其发送给真正的技术翻译人员(虽然它们很昂贵)。

然而,有两个非常重要的注意事项:

首先,应用程序中可能有一些代码如下:

If a = b Then
    lblSomeLabel.Caption = "yes"
Else
    lblSomeLabel.Caption = "no"
End If

...在这种情况下,它不再是静态文本,而是动态的。

更糟糕的是,您有时会在某个事件处理程序中找到它:

If lblSomeLabel.Caption = "yes" Then
    ... do something ...
End If

这意味着即使你修改了设置标题的第一行,你也会破坏你进行比较的后一行。相信我,这在VB6代码中发生了很多。

之前我已经完成了从英语到西班牙语的VB6应用程序的翻译。谨防。这比你初想的要多得多。

正确的方法是找到所有这些字符串,将它们放在某种查找表中(每个目标语言有一列),并且每次都进行查找。

相关问题