Просмотров: 1939 | Дата: 19.05.2024 | Коментарии (0)

Google translate




Скачать архив со всеми исходными файлами.
Небольшая утилита для
онлайнового перевода текста на русский язык.
Программа висит в
трее, выделяем любой фрагмент текста на компьютере или в браузере и жмём TAB.
Язык оригинала определяется автоматически. 
Есть кнопка
переключения направления перевода с русского языка только на английский.

Добавлено поле для ввода текста.



Фото развёрнутой программы:



Для перевода текста используем AJAX API от Google.

http://code.google.com/apis/ajax/playground/#translate

На сайте много примеров (не только по переводу текста) и достаточно понятное и подробное описание на русском языке принципа работы.

Используем AJAX по автоматическому определению языка оригинала и переводу.
Заменяем в скрипте все двойные кавычки на одинарные.
Удаляем все не нужные теги (наша программа будет на компьютере, а не на сервере в сети)
Так как в коде, скрипт придется записывать в одну строку, в скрипте добавляем ; в конце команд.
Добавляем стиль отображения страницы (фон, шрифт,цвет шрифта)
На сервере ограничение по объёму GET запроса переводимого текста ~1300 знаков.

Код JavaScript



Code
<script type='text/javascript'>
google.load('language', '1');
function initialize() {
var text = ' PureBasic is an "high-level" programming language based on established "BASIC" rules ';
google.language.detect(text, function(result) {
if (!result.error && result.language) {
google.language.translate(text, result.language, 'ru',
function(result) {
var translated = document.getElementById('translation');
if (result.translation) {
translated.innerHTML = result.translation;
}
});
}
});
google.language.detect(text, function(result) {
if (!result.error) {
var language = 'unknown';
for (l in google.language.Languages) {
if (google.language.Languages[l] == result.language) {
language = l;
break;
}
}
var container = document.getElementById('detection');
container.innerHTML = '<b>' + language + '</b>';
}
});
}
google.setOnLoadCallback(initialize);
</script>
<DIV id="detection">< /div>
<DIV id="translation">Переводим, ожидайте ! </DIV>


Для перехвата нажатия кнопок используем HotKeyAdd() из библиотеки Droopy Library

Эмуляция нажатия кнопок Ctrl+C используем APi функции :
keybd_event_( кнопка, 0,0,0) - нажать
keybd_event_( кнопка, 0,#KEYEVENTF_KEYUP,0) - отжать

Скрипт переводит только в одну строку, поэтому заранее форматируем текст для перевода:
1. заменяем переход на новую строку Chr(13)+ Chr(10) ( #CRLF$ константа ) на тег <br>
2. заменяем в тексте одинарные кавычки на двойные (а в скрипте наоборот)

Один из вариант кода (в архиве иной)  для версии PureBasic 4.41:     




;==================================================== 
; 26 сентября 2010
; Google.translate
; Перевод с использованием скрипта и WebGadget
; При нажатии на кнопку SHIFT
; Олег Мирошниченко
; Ограничение на обьем переводимого текста ~2000 символом
;=====================================================
Enumeration
#Window_0
#Web
#tray
#icon
;#img
EndEnumeration
;UseJPEGImageDecoder()
;CatchImage(#img, ?Im1, ?Im1End -?Im1 )

Procedure.s Script()
;-------2 в 5 степени =32 раза пробел--------
probel.s=" "
For a=0 To 4
probel.s+probel.s
Next
;Debug probel.s
;--------------------------------------------
keybd_event_(#VK_CONTROL, 0,0,0) ; нажали Ctrl
keybd_event_(67, 0,0,0) ; нажали C
Delay(100) ; пауза между нажали/отпустили
keybd_event_(#VK_CONTROL, 0,#KEYEVENTF_KEYUP,0) ; отпустили Ctrl
keybd_event_(67, 0,#KEYEVENTF_KEYUP,0) ; отпустили C
;---------форматирование текста----------------------------------------------------------
text.s=GetClipboardText() ; вывод текста из буфера
text= ReplaceString(text,#CRLF$,"< br>",1) ; записываем всё одну строку (скрипт понимает одну строку)
text= ReplaceString(text,"'",Chr(34),1) ; меняем запрещенный символ ' на "
;-------------изображение для фона--------------------------------------
;FileName$="body_bg0.jpg"
;Buffer$=Space(512)
;GetFullPathName_(FileName$,Len(Buffer$),@Buffer$,@FilePart)
;img$ = PeekS(@Buffer$)
;----------скрипт---------------------------
Html.s
Html.s + "< style>"
Html.s + "body {padding:2; font: normal 11px Verdana, Arial, Helvetica, sans-serif;color: #444444; background-color: #FFFFCC; }" ; background: url("+img$+") ; background-color: #FFFFCC
Html.s + "a{color: #7f0708;}a:hover{color: #7f0708;}a:active{color:#7f0708;}"
Html.s + "< /style>"
Html.s + "< script type='text/javascript' src='http://www.google.com/jsapi'>"
Html.s + "< /script>< script type='text/javascript'>"
Html.s + "google.load('language', '1');"
Html.s + "function initialize() {"
Html.s + "var text = '"+text+"';"
Html.s + "google.language.detect(text, function(result) {"
Html.s + "if (!result.error && result.language) {"
Html.s + "google.language.translate(text, result.language, 'ru',"
Html.s + "function(result) {"
Html.s + "var translated = document.getElementById('translation');"
Html.s + "if (result.translation) {"
Html.s + "translated.innerHTML = result.translation;"
Html.s + "}"
Html.s + "});"
Html.s + "}"
Html.s + "});"
Html.s + "google.language.detect(text, function(result) {"
Html.s + "if (!result.error) {"
Html.s + "var language = 'unknown';"
Html.s + "for (l in google.language.Languages) {"
Html.s + "if (google.language.Languages[l] == result.language) {"
Html.s + "language = l;"
Html.s + "break;"
Html.s + "}"
Html.s + "}"
Html.s + "var container = document.getElementById('detection');"
Html.s + "container.innerHTML = 'Язык оригинал: '+ '< b>'+language+'< /b>'+'"+probel+"'+'< a href=http://mirashic.narod.ru/ target=_blank;>Посетить сайт< /a>';"
Html.s + "}"
Html.s + "});"
Html.s + "}"
Html.s + "google.setOnLoadCallback(initialize);"
Html.s + "< /script>"
Html.s + "< div id='detection'>< /div>< br>"
Html.s + "< div id='translation'>Переводим, ожидайте ! (Долго не переводит - выбери меньше текста )< /div>"
;-------------скрипт--------------------------------------
SetGadgetItemText(#Web, #PB_Web_HtmlCode, Html.s) ; изменяет html код в WebGadget
HideWindow(#Window_0,0) ; показать окно
EndProcedure

ret=CatchImage(#icon,?icon) ; иконка

If OpenWindow(#Window_0,0,0,500,250,"Онлайн переводчик. Выдели текст и нажми Shift",#PB_Window_Invisible|#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget)
StickyWindow(#Window_0, 1) ; окно всегда сверху
WebGadget(#Web, 0,0,500,250,"")
AddSysTrayIcon(#tray,WindowID(#Window_0),ret) ; Добавляет значок в Systray
HotKeysInit() ; Инициализация библиотеки HotKeys из Droopy Library
HotKeyAdd(WindowID(#Window_0), #VK_SHIFT, @Script(), "SkrinAll", 1,0,0) ; Перехват кнопки SHIFT
CreatePopupMenu(0) ; Контекстное меню для трея
MenuItem(0,"Выход")
EndIf
;--------------------------------------
Repeat
Event=HotkeyWaitWindowEvent()
Window= EventWindow()
Gadget= EventGadget()
Select Event
Case #PB_Event_SizeWindow
ResizeGadget(#Web,#PB_Ignore,#PB_Ignore,WindowWidth(#Window_0),WindowHeight(#Window_0))
Case #PB_Event_SysTray
If EventType()=#PB_EventType_RightClick
DisplayPopupMenu(0,WindowID(#Window_0))
EndIf
Case #PB_Event_Menu
If EventMenu()=0
Break
EndIf
EndSelect
If Event = #PB_Event_CloseWindow
HideWindow(#Window_0,1) ; скрыть окно
EndIf
ForEver
;----------------------------------------
DataSection
icon: IncludeBinary "iconka.ico"
EndDataSection













Сайт посвящён языку программирования PureBasic — коммерческий компилятор языка программирования, использующего синтаксис BASIC. Предназначен для создания кроссплатформенных приложений для AmigaOS, Linux, Microsoft Windows, Windows NT и Mac OS X. Разработан компанией Fantaisie Software.