Что нового

Google translate(Не корректная работа)

Arei

Скриптер
Сообщения
938
Репутация
115
За основу был взят пример Yashied'а
Код:
#Region - Demo

  $w = _GoogleTranslate("HOW are you?")

  MsgBox("","",$w)




    Func _GoogleToMsgBox($sText, $sFrom, $sTo)
        Msgbox(4096, "Google Translate [" & $sFrom & ":" & $sTo & "]", $sText & @TAB & @TAB & @TAB & @CRLF & @CRLF & _GoogleTranslate($sText, $sFrom, $sTo))
    EndFunc
#EndRegion

Func _GoogleTranslate($sText, $sFrom = "en", $sTo = "ru")
    Local Const $FileName = "Translation.jsn"
    Local Const $Pattern = '"translatedText":"([^"]+)"'
    Local $GoogleURL = "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=%s&langpair=%s%%7C%s"
    Local $File

    $GoogleURL = StringFormat($GoogleURL, $sText, $sFrom, $sTo)

    If Not InetGet($GoogleURL, $FileName, 1) Then Return SetError(1, 0, 0)

    $File = FileOpen($FileName)
    FileGetSize($FileName)
    $Translation = FileRead($File, FileGetSize($FileName))
    FileClose($File)
    FileDelete($FileName)



    If StringRegExp($Translation , $Pattern) Then
        $Translation = StringRegExp($Translation , $Pattern, 1)
        $Translation = $Translation[0]

        Return $Translation
    EndIf
EndFunc

и немного переработан, такой вид работает,но если я хочу перевести из Русского на Английский, то выдаёт 0.Как это можно исправить.
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Возможно эти ссылки будут вам полезными:
1) http://autoit-script.ru/index.php/topic,3423.0.html
2) http://autoit-script.ru/index.php?topic=6521.msg45410#msg45410
 
Автор
A

Arei

Скриптер
Сообщения
938
Репутация
115
переводчик Google от Creator'а не работает,подскажите с примером что написан выше.
 

axlwor

Скриптер
Сообщения
657
Репутация
147
наверно гугля опять что то меняет. любят они это дело
 
Автор
A

Arei

Скриптер
Сообщения
938
Репутация
115
пример, который в описании хорошо и быстро работает.но надо его переделать,но не получается.
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
Arei

Код:
#AutoIt3Wrapper_Outfile=GoogleTranslator.exe
#AutoIt3Wrapper_Icon=GoogleTranslator.ico
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_UseAnsi=y
#AutoIt3Wrapper_Res_Comment=
#AutoIt3Wrapper_Res_Description=GoogleTranslator.exe
#AutoIt3Wrapper_Res_Fileversion=0.1.0.0
#AutoIt3Wrapper_Res_FileVersion_AutoIncrement=n
#AutoIt3Wrapper_Res_LegalCopyright=AZJIO
#AutoIt3Wrapper_Res_Language=1049
#AutoIt3Wrapper_Run_Au3check=n

; параллельная разработка AZJIO, ViSiToR, и UDF от Stephen Podhajecki
; ресайз, хоткей поддерживаются, автофокус поля Edit
#include "Encoding.au3"
#include <ComboConstants.au3>
#NoTrayIcon
Opt("GUIResizeMode", 0x0322)
GUIRegisterMsg(0x0214 , "WM_SIZING")
GUIRegisterMsg(0x0024, "WM_GETMINMAXINFO")

$GUI = GUICreate("Google - переводчик", 420, 420, -1, -1, 0x00040000+0x00020000)
If Not @compiled Then GUISetIcon('GoogleTranslator.ico', 0)
$StatusBar = GUICtrlCreateLabel("", 5, 390-20, 410-100, 17)
GUICtrlSetFont(-1, 10, 800)
GUICtrlSetColor(-1, 0x0000FF)
GUICtrlSetResizing(-1, 512 + 256 + 2)

GUICtrlCreateLabel("Выберите язык исходного текста:", 10, 12)
GUICtrlSetResizing(-1, 512 + 256 + 32 + 4)
$Lang_Combo1 = GUICtrlCreateCombo("", 190, 10, 200, 50, BitOr($GUI_SS_DEFAULT_COMBO, $CBS_DROPDOWNLIST))
GUICtrlSetResizing(-1, 512 + 256 + 32 + 4)

GUICtrlCreateLabel("Выберите язык перевода:", 10, 37)
GUICtrlSetResizing(-1, 512 + 256 + 32 + 4)
$Lang_Combo2 = GUICtrlCreateCombo("", 190, 35, 200, 50, BitOr($GUI_SS_DEFAULT_COMBO, $CBS_DROPDOWNLIST))
GUICtrlSetResizing(-1, 512 + 256 + 32 + 4)
_SetCombo()


$nRe = GUICtrlCreateButton("^v", 395, 10, 20, 48)
GUICtrlSetResizing(-1, 512 + 256 + 32 + 4)
GUICtrlSetTip(-1,  'Инвертировать направление перевода.')

$nInv = GUICtrlCreateButton("^", 315, 210, 20, 20)
GUICtrlSetResizing(-1, 512 + 256 + 4)
GUICtrlSetTip(-1,  'Переместить текст, иногда'&@CRLF&'полезно не zh>ru, а zh>en>ru.'&@CRLF&'Ctrl+Стрелка вниз')

$Test = GUICtrlCreateButton("Проверка", 340, 210, 70, 20)
GUICtrlSetResizing(-1, 512 + 256 + 4)
GUICtrlSetTip(-1,  'Проверка обратным'&@CRLF&'переводом текста.'&@CRLF&'Ctrl+Стрелка вверх')

$Clr = GUICtrlCreateButton("Очистить", 145, 60, 70, 20)
GUICtrlSetResizing(-1, 512 + 256 + 32 + 4)
GUICtrlSetTip(-1,  'Ctrl+Delete')

$Translate1 = GUICtrlCreateButton("Очистить > Вставить > Перевести", 220, 60, 190, 20)
GUICtrlSetResizing(-1, 512 + 256 + 32 + 4)
GUICtrlSetTip(-1,  'Ctrl+Enter')

GUICtrlCreateLabel("Исходный текст:", 10, 64, -1, 17)
$Edit1 = GUICtrlCreateEdit('', 10, 80, 400, 130, 0x0004+0x0040+0x1000+0x00200000)
GUICtrlSetResizing(-1, 7 + 32)
GUICtrlSetData(-1, 'Переводчик имеет ограничение по количеству символов: 350-376.'&@CRLF&'Есть возможность выполнить обратный перевод для проверки качества.') ; закомментировать эту строку, она для теста
GUICtrlSetState(-1, 256)

$L2=GUICtrlCreateLabel("Результат перевода:", 10, 214, -1, 17)
$Edit2 = GUICtrlCreateEdit("", 10, 230, 400, 130, 0x0004+0x0040+0x1000+0x00200000)
GUICtrlSetResizing(-1, 7 + 64)
; GUICtrlSetFont (-1,-1, -1, -1, 'Arial')

$Translate = GUICtrlCreateButton("Перевести", 340, 360, 70, 25)
GUICtrlSetResizing(-1, 512 + 256 + 64 + 4)
GUICtrlSetTip(-1,  'Ctrl+Enter')

Dim $AccelKeys[4][2] = [["^{Enter}", $Translate],["^{UP}", $Test],["^{DEL}", $Clr],["^{DOWN}", $nInv]]
GUISetAccelerators($AccelKeys)

GUISetState()
Send('^+{HOME}')

While 1
    $nMsg = GUIGetMsg()

    Switch $nMsg
        Case -3
            Exit
        Case $Clr
            GUICtrlSetData($Edit1, '')
			GUICtrlSetState($Edit1, 256)
			
        Case $nRe
            $Lang_Combo01=GUICtrlRead($Lang_Combo1)
            $Lang_Combo02=GUICtrlRead($Lang_Combo2)
            GUICtrlSetData($Lang_Combo1, $Lang_Combo02)
            GUICtrlSetData($Lang_Combo2, $Lang_Combo01)
			
        Case $Test
			If GUICtrlRead($Test)='Проверка' Then
				$Text = GUICtrlRead($Edit2)
				$Lang1 = StringRegExpReplace(GUICtrlRead($Lang_Combo2), " - .*$", '')
				$Lang2 = StringRegExpReplace(GUICtrlRead($Lang_Combo1), " - .*$", '')
				If $Text = '' Then
					MsgBox(0, 'Message', 'Нечего переводить.')
					ContinueLoop
				EndIf
				If $Lang1 = $Lang2 Then
					MsgBox(0, 'Сообщение', 'Укажите разные направления перевода.')
					ContinueLoop
				EndIf
				GUICtrlSetBkColor($Edit2, 0xffd7d7)
				GUICtrlSetState($Translate, 128)
				GUICtrlSetState($Test, 128)
				GUICtrlSetData($StatusBar, "Пожалуйста подождите...")
				
				$Result = _GoogleTranslateString($Text, $Lang1 & "|" & $Lang2, True)
				
				GUICtrlSetData($Edit2, $Result)
				GUICtrlSetState($Translate, 64)
				GUICtrlSetState($Test, 64)
				GUICtrlSetData($StatusBar, "Готово")
				GUICtrlSetData($Test, 'Отмена')
				GUICtrlSetBkColor($Edit2, 0xffffff)
			Else
				GUICtrlSetData($Edit2, $Text)
				GUICtrlSetData($Test, 'Проверка')
			EndIf
			
			
        Case $nInv
            GUICtrlSetData($Edit1, GUICtrlRead($Edit2))
			
        Case $Translate1
            GUICtrlSetData($Edit1, '')
			GUICtrlSetState($Edit1, 256)
			Send('+{INS}')
			Sleep(100)
			ContinueCase
			
        Case $Translate
            $Text = GUICtrlRead($Edit1)
            $Lang1 = StringRegExpReplace(GUICtrlRead($Lang_Combo1), " - .*$", '')
            $Lang2 = StringRegExpReplace(GUICtrlRead($Lang_Combo2), " - .*$", '')
			If $Text = '' Then
				MsgBox(0, 'Message', 'Нечего переводить.')
				ContinueLoop
			EndIf
			If $Lang1 = $Lang2 Then
				MsgBox(0, 'Сообщение', 'Укажите разные направления перевода.')
				ContinueLoop
			EndIf
			$kolSim =StringLen($text)
			If $kolSim>376 And MsgBox(4, 'Сообщение', 'Превышено максимальное количество символов, обрезать?'&@CRLF&'Допустимо 350-376 (текущее: ' & $kolSim & ')')=6 Then $text=StringMid($text, 1, 376)
			 
			GUICtrlSetBkColor($Edit2, 0xffd7d7)
            GUICtrlSetState($Translate, 128)
			GUICtrlSetState($Test, 128)
            GUICtrlSetData($StatusBar, "Пожалуйста подождите...")
			
			$Result = _GoogleTranslateString($Text, $Lang1 & "|" & $Lang2, True)
            
            GUICtrlSetData($Edit2, $Result)
            GUICtrlSetState($Translate, 64)
			GUICtrlSetState($Test, 64)
			GUICtrlSetData($Test, 'Проверка')
            GUICtrlSetData($StatusBar, "Готово")
			GUICtrlSetBkColor($Edit2, 0xffffff)
			If GUICtrlRead($Edit2)='' Then
				$Ping=Ping('translate.google.ru', 250)
				If $Ping Then
					MsgBox(0, 'Сообщение', 'Интернет доступен, возможно количество'&@CRLF&'символов близко к максимальному (350-376)')
				Else
					MsgBox(0, 'Сообщение', 'Отсутствует доступ к интернету')
				EndIf
			EndIf
    EndSwitch
WEnd

Func _SetCombo()
	Local $vTest = InetRead('http://translate.google.ru/?q=#ru|en|')
	If @error Then MsgBox(0, 'Сообщение', 'Возможно интернет отключен')
	$vTest = BinaryToString($vTest)
	; $vTest=StringRegExp($vTest, '(—</option><option  value="az.*?</select></div>)', 3)
	$vTest=StringRegExp($vTest, '(<option value=az.*?</select></div>)', 3)
	If UBound($vTest)<2 Then
		$vTest=$vTest[0]
	Else
		$vTest=$vTest[1]
	EndIf
	If StringInStr($vTest, 'value=en>БОЗМЙКУЛЙК<') Then $vTest= _Encoding_KOI8To1251($vTest)
	$vTest=StringRegExp($vTest, 'value=(.*?)>(.*?)</option>', 3)
	Local $lng = ""
	For $i = 0 To UBound($vTest)-1 Step  2
			$lng &= $vTest[$i] & " - " & StringUpper(StringLeft($vTest[$i+1], 1)) & StringTrimLeft($vTest[$i+1], 1) & "|"
	Next
	$vTest = ""
	$lng=StringTrimRight($lng, 1)
	GUICtrlSetData($Lang_Combo1, 'auto - Определить язык|'&$lng, "en - Английский")
	GUICtrlSetData($Lang_Combo2, $lng, "ru - Русский")
EndFunc

Func WM_SIZING()
	$aStart = ControlGetPos($GUI, "", $Translate)
	$aEdit = ControlGetPos($GUI, "", $Edit1)
	$h=($aStart[1] -80)/2-10
	$w=$aStart[0]+60
	GUICtrlSetPos($Edit1, 10, 80, $w, $h)
	GUICtrlSetPos($Edit2, 10, 80+$h+20, $w, $h)
	GUICtrlSetPos($L2, 10, 80+$h+4)
	GUICtrlSetPos($nInv, $aEdit[2]-85, 80+$h+1)
	GUICtrlSetPos($Test, $aEdit[2]-60, 80+$h+1)
EndFunc

Func WM_GETMINMAXINFO($hWnd, $iMsg, $wParam, $lParam)
	#forceref $iMsg, $wParam
	If $hWnd = $GUI Then
		Local $tMINMAXINFO = DllStructCreate("int;int;" & _
				"int MaxSizeX; int MaxSizeY;" & _
				"int MaxPositionX;int MaxPositionY;" & _
				"int MinTrackSizeX; int MinTrackSizeY;" & _
				"int MaxTrackSizeX; int MaxTrackSizeY", _
				$lParam)
		DllStructSetData($tMINMAXINFO, "MinTrackSizeX", 420) ; минимальные размеры окна
		DllStructSetData($tMINMAXINFO, "MinTrackSizeY", 420)
	EndIf
EndFunc

Func _GoogleTranslateString($sText, $sLangPair = -1, $bEncodeURL = False)
	If $sLangPair = -1 Then $sLangPair = "auto|en"
	
	If $bEncodeURL Then $sText = _Encoding_URLToHex($sText)
	
	$sResult = BinaryToString(InetRead('http://google.ru/translate_t?langpair=' & $sLangPair & '&text=' & $sText))
	
	If StringRight($sLangPair, 2) = "ru" Or StringRight($sLangPair, 4) = "auto" Then $sResult = _Encoding_KOI8To1251($sResult)
	
	$aResult = StringRegExp($sResult, '(?si)(?:onmouseout=".*?>)(.*?)(?=</SPAN>)', 3)
	$sResult = ''
	
	For $i = 0 To UBound($aResult)-1
		$sResult &= $aResult[$i]
	Next
	
	$sResult = StringReplace($sResult, '
', @CRLF)
	
	If _Encoding_IsUTF8Format($sResult) Then $sResult = _Encoding_UTF8ToANSI($sResult)
	
	If $bEncodeURL Then $sResult = _URLDecode($sResult)
	
	Return $sResult
EndFunc

; #FUNCTION# ==============================================
; Description ...: Decodeds text for use in URLs
; Parameters ....: $sURL - IN - The text to decode
; Return values .: The decoded text
; Author ........: Stephen Podhajecki {gehossafats at netmdc. com}
; Remarks .......: Replaces escaped hex values for url encoding with ascII characters.
;                  Decoding based on information provided here: http://www.blooberry.com/indexdot/html/topics/urlencoding.htm
; Related .......: _URLEncode
; =========================================================
Func _URLDecode($sURL)
    Local $aEncodable[13] = ['"',"'","<",">","\","^","[","]","`","+","$",",","#"]
    ;decode non-printable and space
    Local $sTemp = $sURL
	
    For $x = 0 To 32
        $sTemp = StringReplace($sTemp,"%"&Hex($x,2),Chr($x))
    Next
	
    ;decode "unsafe"
    For $x = 0 To UBound($aEncodable)-1
        $sTemp = StringReplace($sTemp,"%"&Hex(Asc($aEncodable[$x]),2),$aEncodable[$x])
    Next
	
    ;decode upper ascii and {}|~_
    For $x = 123 To 255
        $sTemp = StringReplace($sTemp,"%"&Hex($x,2),Chr($x))
    Next
	
    ;decode % last 
    $sTemp = StringReplace($sTemp,"%25","%")
    $sTemp = _ConvertEntities($sTemp)
	
    Return $sTemp
EndFunc

; #FUNCTION# =====================================================================================================================
; Description ...: _ConvertEntities
; Parameters ....: $sURL - IN - The Text to convert
; Return values .: Success - Converted string
; Author ........: Stephen Podhajecki {gehossafats at netmdc. com}
; Remarks .......: Replaces HTML escape sequences with character representation
;                  Based on information found here: http://www.theukwebdesigncompany.com/articles/entity-escape-characters.php
;                  nbsp is changed to 32 instead of 160
; Related .......: 
; ================================================================================================================================
Func _ConvertEntities($sURL)
    Local $sTemp = $sUrl
    Local $aEntities[96][2]=[["&quot;",34],["&amp;",38],["&lt;",60],["&gt;",62],[" ",3],[" ",32] _
        ,["&iexcl;",161],["&cent;",162],["&pound;",163],["&curren;",164],["&yen;",165],["&brvbar;",166] _
        ,["&sect;",167],["&uml;",168],["&copy;",169],["&ordf;",170],["&not;",172],["&shy;",173] _
        ,["&reg;",174],["&macr;",175],["&deg;",176],["&plusmn;",177],["&sup2;",178],["&sup3;",179] _
        ,["&acute;",180],["&micro;",181],["&para;",182],["&middot;",183],["&cedil;",184],["&sup1;",185] _
        ,["&ordm;",186],["&raquo;",187],["&frac14;",188],["&frac12;",189],["&frac34;",190],["&iquest;",191] _
        ,["&Agrave;",192],["&Aacute;",193],["&Atilde;",195],["&Auml;",196],["&Aring;",197],["&AElig;",198] _
        ,["&Ccedil;",199],["&Egrave;",200],["&Eacute;",201],["&Ecirc;",202],["&Igrave;",204],["&Iacute;",205] _
        ,["&Icirc;",206],["&Iuml;",207],["&ETH;",208],["&Ntilde;",209],["&Ograve;",210],["&Oacute;",211] _
        ,["&Ocirc;",212],["&Otilde;",213],["&Ouml;",214],["&times;",215],["&Oslash;",216],["&Ugrave;",217] _
        ,["&Uacute;",218],["&Ucirc;",219],["&Uuml;",220],["&Yacute;",221],["&THORN;",222],["&szlig;",223] _
        ,["&agrave;",224],["&aacute;",225],["&acirc;",226],["&atilde;",227],["&auml;",228],["&aring;",229] _
        ,["&aelig;",230],["&ccedil;",231],["&egrave;",232],["&eacute;",233],["&ecirc;",234],["&euml;",235] _
        ,["&igrave;",236],["&iacute;",237],["&icirc;",238],["&iuml;",239],["&eth;",240],["&ntilde;",241] _
        ,["&ograve;",242],["&oacute;",243],["&ocirc;",244],["&otilde;",245],["&ouml;",246],["&divide;",247] _
        ,["&oslash;",248],["&ugrave;",249],["&uacute;",250],["&ucirc;",251],["&uuml;",252],["&thorn;",254]]
   
	For $x = 0 To Ubound($aEntities)-1
        $sTemp = StringReplace($sTemp,$aEntities[$x][0],Chr($aEntities[$x][1]))
    Next
	
    For $x = 32 To 255
        $sTemp = StringReplace($sTemp,"&#"&$x&";",chr($x))
    Next
	
	For $x = 256 To 10000
        $sTemp = StringReplace($sTemp,"&#"&$x&";",chrw($x))
    Next
	
    Return $sTemp
EndFunc
 
Автор
A

Arei

Скриптер
Сообщения
938
Репутация
115
Спасибо работает,сейчас начну издеваться над кодом. :IL_AutoIt_1:
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
Попробовал функции Google Functions от Beege, там нет ограничений в 370 символов. Поменял на "ru" в функции, в качестве текста использовал обзац, без проблем получил перевод.

Код:
#include <inet.au3>
#include <array.au3>

$Translate = _GoogleTranslate("I was working on a project to create an automated Windows NT 4 build for a company in the UK. It became clear that around half the applications required featured no way to silently install them. Searched around for a while for some way to force button presses and came across Microsoft ScriptIt which was a compiled WinBatch script designed for clicking buttons in automated builds. ScriptIt worked OK but it was extremely unreliable. It was notoriously fussy about the speed of the machine it was used on and had no way to control the key delays between keystrokes. Another feature that caused problems was that there was no way to specify a working directory when running a program which caused loads of problems with many of the applications I was scripting. Also, some of the functions didn't work under NT 5 beta (i.e. Windows 2000).")
MsgBox(0, 'Английский > Русский', $Translate)

Func _GoogleTranslate($sText, $sTo = "ru", $sFrom = "en")
    Local $sTranslation, $sUrl, $sSource
    $sUrl = StringFormat("http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=%s&langpair=%s%%7C%s", $sText, $sFrom, $sTo)
    $sSource = _INetGetSource($sUrl)
    $sTranslation = StringRegExp(BinaryToString($sSource, 4), '"translatedText":"([^"]+)"', 1)
    Return $sTranslation[0]
EndFunc   ;==>_GoogleTranslate
 
Верх