VB 6 исходный код, речевой текст на французском хочу перевести на английский - PullRequest
2 голосов
/ 06 июня 2011

У меня есть программа, которая может быть полезна для меня, но документация и все подсказки на языке, который я не могу прочитать. Исходный код доступен, и всего около 84 000 строк кода. У меня вопрос, есть ли способ экспортировать или захватить, например, текст всплывающей подсказки, текст кнопки, то, что будет отображаться конечному пользователю как часть любого читаемого сообщения, чтобы легко перевести текст?

Ответы [ 5 ]

1 голос
/ 06 июня 2011

Одним из возможных подходов является использование чего-то, что знает, как преобразовать программу VB6. Это должно было бы проанализировать VB6, вытащить все буквенные текстовые строки, предложить их вам для перевода и заменить ваши замены исходными строками. На самом деле вам нужно два прохода: первый для создания набора, позволяющего перевести интересующие вас, и второй для замены назначенных переводов, если таковые имеются. Скорее всего, у вас есть возможность отладки, потому что обычно есть что-то, что зависит от размера строки.

Как вы переводите строки с одного языка на другой, зависит от вас. Как предлагают другие авторы, вы можете воспользоваться онлайн-переводчиком и взять то, что вы получите. Я ожидаю, что вы добьетесь большего успеха, если это сделает человек. Как правило, они должны сосредоточиться только на значении строк, поскольку они извлекаются из кода, но вы также найдете случаи, когда перевод зависит от того, что делает код, и поэтому должен быть задействован программист.

Наш комплект реинжиниринга программного обеспечения DMS с интерфейсом Visual Basic может быть легко настроен для этого. DMS предоставляет общий механизм разбора и преобразования; интерфейс VB предоставляет подробную информацию о Visual Basic 6 (в вашем случае).

Разновидностью этой идеи является замена переведенных буквенных строк ссылками на «ресурсы» (что составляет таблицу поиска, проиндексированную по номеру строки), которые содержат либо оригинал (французский), либо новый (английский). Это решение создает нечто, близкое к тому, что хотят делать люди, занимающиеся интернационализацией. (Это не заботится о датах и ​​форматах валют; для них требуется анализ потока данных для определения вычислений, ведущих к дате / от даты или операций с валютой. Хотя DMS и не нужен для преобразования буквенных строк, анализ потока можно выполнить, поэтому его можно настроить для выполнения это тоже.)

Если у вас есть точная информация о расположении строк в тексте (например, начальная строка / столбец, конечная строка / столбец), вы можете сделать это другим способом: использовать эту точную информацию для извлечения строк, а затем использовать та же самая точная информация, чтобы повторно вставить переводы. Чтобы не повредить расположение строк, вы должны заменить строки, начиная с конца каждого файла, сначала работая в обратном направлении по всему файлу. Это должно быть просто сделать с буфером текста.

Наша Система поиска исходного кода (SCSE) может использоваться для тривиального поиска таких строк и их местоположения. SCSE индексирует исходный код в соответствии со своей лексической структурой (и, таким образом, точно видит строковые литералы), а затем все разрешает запросы по исходному коду для произвольных последовательностей токенов. Он использует языковые интерфейсы DMS (для вашей цели - интерфейс VB6) для точного выбора лексем.

Можно охотиться за утверждениями, которые присваивают константу больше 10 (используя ограничение диапазона) переменной, имя которой содержит X (используя подстановочный знак) с запросом, подобным этому:

 I=*x* '=' N>10

SCSE найдет все совпадения, покажет вам совпадения и позволит увидеть совпадение в исходном коде одним дополнительным щелчком.

Запрос, который вы хотите найти буквенные строки, чрезвычайно прост:

 S=*

означает "найти все строки независимо от содержимого". Вы можете включить ведение журнала SCSE, и он запишет список всех попаданий вместе с точными позициями в файл журнала. В этот момент у вас есть вся точная строковая информация. (SCSE не может выполнить анализ потока, поэтому он не может помочь интернационализировать даты так же, как DMS, но может найти

 N 'mod' 4 '==' 0 

шаблонов, которые, как правило, являются поправками на високосный год).

0 голосов
/ 10 июня 2011

Если вы откроете файл 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 вы обычно будете искать свойства типа Caption и ToolTip. Простой 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 с английского на испанский. Осторожно. Это намного больше работы, чем вы думаете.

Правильный способ сделать это - найти все эти строки, поместить их в какую-то таблицу поиска (с одним столбцом для каждого целевого языка) и выполнять поиск каждый раз.

0 голосов
/ 06 июня 2011

Просто мой 2с.Автоматический перевод текста исходного кода ОЧЕНЬ проблематичен.По сути, это просто не всегда хорошо работает.Почему бы и нет?Контекст.Чтобы автоматический переводчик работал хорошо, он должен иметь некоторое количество контекста.Но когда вы говорите о тексте исходного кода, вы говорите о небольших фрагментах текста, которые либо не имеют очевидного контекста, либо связаны между собой с помощью кода и, следовательно, теряют свой контекст.что-то "из автоматического перевода, но почти гарантированно заставить носителей языка 1) хихикать или 2) почесать голову, задаваясь вопросом, что, черт возьми, означает заголовок кнопки ...

0 голосов
/ 06 июня 2011

Один вариант будет

0 голосов
/ 06 июня 2011

У меня нет идеального предложения, но это может быть ваш лучший шанс: используйте переводчик документов и приблизьтесь.Затем скомпилируйте новый источник и посмотрите, что ломается.Скорее всего, он будет игнорировать элементы, которые не являются правильными словами (например, btnOK и т. Д.)

Существует несколько сайтов, которые используют Google Translator.Вот только один случайный вариант, который я выбрал:

http://www.onlinedoctranslator.com/

Если вы хотите создать свой собственный переводчик, вы можете посмотреть эту статью CodeProject:

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

Я знаю, что это не входит в сферу вашего первоначального вопроса, но, поскольку использование переводчика может быть вашим лучшим вариантом, возможно, вы могли бы создать что-то, чтобы оно работало лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...