// // *************************************************************** // ***** Скрипт перевода текстов с одного языка на другой. ***** // ***** Автор: Андрей Сорвин (http://andrey.sorvin.ru) ***** // ***** Скрипт работает на интерпретаторе Dolphin ***** // ***** версии не ниже 1.0.0.9 ***** // *************************************************************** // // Написание этого скрипта навеяно канадской программой-переводчиком Ace Translator, // информацию о которой можно посмотреть на сайте http://www.acetools.biz // Не смотря на то, что вышеуказанная программа самостоятельно НЕ переводит // тексты, а пользуется предоставленным компанией Google сервисом, она является // платной. Одна лицензия на одного пользователя стоит 59.95 евро!!! // На мой взгляд, программист вышеуказанной программы-переводчика - мошенник, // ведь, по сути, программа-переводчик ничего из себя не представляет. // // Мой же скрипт способен выполнить те же функции, что и программа-переводчик // Ace Translator, но является абсолютно бесплатным. Кроме того, Вы можете // самостоятельно изменить код скрипта, для того, тобы автоматизировать процесс // перевода огромного количества текстов, статей или сайтов. // // Также, этот скрипт демонстрирует новые возможности паскалеобразного робота- // интерпретатора Dolphin // // Я написал комментарий к каждой строчке кода, для более понятного восприятия. // ***************************************************************************** // ***************************************************************************** Язык1 := 'ru'; //Обозначение языка с которого нужно перевести текст Язык2 := 'en'; //Обозначение языка на который нужно перевести текст Черновик := 'draft.txt'; //Указываем имя файла черновика для автосохранения {Переводимый текст} Текст := 'Однажды, в студеную зимнюю пору я вышел из леса, был сильный мороз. Гляжу, поднимается медленно в гору лошадка, везущая хвороста воз'; ReadFile(Черновик, Текст); //Если существует файл черновика, читаем из него текст EditorHandle := CreateEditor('Введите текст для перевода средствами Google.com'); //создаем новое окно редактора. EditorHandle - хэндл окна WriteEditor(EditorHandle, Текст); //Вставляем наш текст в редактор ShowEditor(EditorHandle); // Делаем редактор видимым //С параметром 1 - Ошибка НажатаяКнопка := WaitEditor(EditorHandle); //Дожидаемся завершения редактирования текста Case НажатаяКнопка of //Определяем какая кнопка была нажата в редакторе 0: begin //Если нажат крестик (закрыт редактор) // Ничего не делаем end; 1: begin // Если в редакторе была нажата кнопка "ОК" ReadEditor(EditorHandle, Текст); // Считываем текст из редактора WriteFile(Черновик, Текст); // Сохраняем отредактированный текст в файл черновика ПереведенныйТекст := GoogleTranslate(Текст, Язык1, Язык2); //Процедура GoogleTranslate описана ниже If trim(ПереведенныйТекст) <> '' // Если Переведенный текст не пуст then begin ClearEditor(EditorHandle); TitleEditor(EditorHandle, 'Результат перевода'); WriteEditor(EditorHandle, ПереведенныйТекст); //Вставляем переведенный текст в редактор ShowEditor(EditorHandle); // Делаем редактор видимым WaitEditor(EditorHandle); //Дожидаемся закрытия редактора end; end; 2: begin // Если в редакторе была нажата кнопка "Cancel" // Ничего не делаем end; end; DestroyEditor(EditorHandle); // Высвобождаем память, удаляем редактор {На этом месте скрипт завершает свою работу} // ***************************************************************************** // ***************************************************************************** Function GoogleTranslate(T, l1, l2); // Функция отправляет запрос на translate.google.com с текстом // и получает переведенный текст begin T := AnsiToUTF(T); //Переводим текст в кодировку UTF-8 T := StrToHexStr(T, 1); //Переводим текст в HEX-кодированную строку {Подготавливаем HTTP запрос для сайта translate.google.com } Source :='GET /translate_a/t?client=t&text='+T+'&sl='+l1+'&tl='+l2+' HTTP/1.1 Host: translate.google.com User-Agent: Mozilla/5.0 '; {Отправляем HTTP запрос и получаем ответные данные} Response := Send('translate.google.com', 80, Source, 5); ResponseText := Response; n := 0; s := ''; For i := 1 to Length(ResponseText) do begin Char := ResponseText[i]; Case Char of Chr(13): begin If ResponseText[i+1] = Chr(10) then begin inc(n); arr[n] := trim(s); end; end; Chr(10): s := ''; end; s := s + Char; end; ResponseText := ''; FoundIdx := 0; For i := 1 to n - 2 do begin If foundIdx = 0 then begin if arr[i] = '' then foundIdx := i+1; end else begin If (i > foundIdx) then ResponseText := ResponseText + arr[i]; end; end; {Наводим марафет} Delete(ResponseText, 1, 1); Delete(ResponseText, length(ResponseText), 1); {Заменяем в ответных данных некоторые символы} ResponseText := StringReplace(ResponseText, '\r',chr(13)); ResponseText := StringReplace(ResponseText, '\n ',chr(10)); ResponseText := StringReplace(ResponseText, '\n',chr(10)); {Возвращаем переведенный текст} Result := ResponseText; end;