Можно, ИМХО, составить список языков RTL и искать их в заголовке Content-Language.нельзя определить, является ли язык на который выполняется перевод RTL или нет...
Так и сделал, только в заголовке искать незачем, мы же и так знаем на какой язык переводим .Можно, ИМХО, составить список языков RTL и искать их в заголовке Content-Language.
Сложновато для разбора, я понял в чём идея, но хотел бы это применить без dictionary и в том же формате что я привык ...Предлагаю немного изменить файл иконок флагов и их использование
Не понял, где остаются пустые строки? Автоопределение у меня всегда сверху в Translate From.И ещё, там остаются пустые строки, а также нужно чтобы автоопределение было всегда сверху.
Сверху.где остаются пустые строки?
А у меня как по сортировке.Автоопределение у меня всегда сверху в Translate From.
Я проверял код на всех версиях (постоянно использую AutoIt Path Switcher - Переключение пути к папке AutoIt, спасибо Вам). Вот несколько скриншотов при запуске моего кода в 3.3.12.0:Я вам советую поставить последнюю версию AutoIt, там было много изменений
CreatoR сказал(а):Потому что Google переводит лучше.А почему именно Google, а не Yandex ?
$YA_KEY = "";http://api.yandex.ru/key/keyslist.xml
ConsoleWrite(YaTranslate("Hello, how are you?", "ukr")&@CRLF)
Func YaTranslate($text, $lang="ru")
$url = "https://translate.yandex.net/api/v1.5/tr/translate?format=plain&key="&$YA_KEY&"&text="&$text&"&lang="&$lang
$xml = BinaryToString(InetRead($url))
If $xml == "" Then Return ""
$arr = StringRegExp($xml, '(?i)<text>(.*?)</text>', 1)
If UBound($arr) > 0 Then Return $arr[0]
Return ""
EndFunc
Похоже, надо с этими запросами разбираться более подробно, я же привел простой пример, который работает (тупо скопировал в код то, что показал сниффер при переводе файла).У меня ваш пример с POST не переводит с auto...
Страница, которую вы пытались перевести, уже переведена на английский.
v0.5
+ Добавлена опция "Переводить по мере набора текста".
* Убрано ограничение символов при переводе (спасибо madmasles).
* Улучшена обработка изменения языка.
v0.6
+ Добавлена опция "Переводить по выделению".
+ Добавлена опция "Проговорить" текст (используя Yandex SpeechKit Cloud).
+ Добавлен диалог настроек (с базовыми опциями).
+ Добавлен диалог "О программе".
V0.7
* Исправлена проблема с не сохранением выбранного Голоса в настройках.
* Голос теперь можно выбрать даже если опция "Переводить по выделению" отключена.
#NoTrayIcon
#include 'HTMLEntities.au3'
Global Const $sUserAgent = 'Opera/9.80 (Windows NT 6.1) Presto/2.12.388 Version/12.17'
Global Const $sGoogleMain_Server = 'translate.google.com'
Global Const $sGoogleTranslate_Server = 'translate.googleusercontent.com'
Global $sApp_Language = 'English'
MsgBox(0, '', _GoogleTranslateServerIsOnline())
$sText='Finds an entry within an one-dimensional array'
$sResult = _GoogleTranslateString($sText, 'auto', 'ru')
MsgBox(0, '', $sResult)
Func _GoogleTranslateServerIsOnline()
Local $iTimeout = 3000, $iPort = 80
Local $sName_To_IP = TCPNameToIP($sGoogleMain_Server)
Local $iSocket = TCPConnect($sName_To_IP, $iPort)
If $iSocket = -1 Then
TCPCloseSocket($iSocket)
Return SetError(1, 0, "")
EndIf
Local $sCommand = 'HEAD / HTTP/1.0' & @CRLF
$sCommand &= 'Host: ' & $sGoogleMain_Server & @CRLF
$sCommand &= 'User-Agent: ' & $sUserAgent & @CRLF
$sCommand &= 'Connection: close' & @CRLF & @CRLF
Local $iBytesSent = TCPSend($iSocket, $sCommand)
If $iBytesSent = 0 Then
Return SetError(2, @error, 0)
EndIf
Local $iTimer = TimerInit(), $sRecv = '', $sCurrentRecv = ''
Local $iOpt_TO = Opt('TCPTimeout', $iTimeout)
While 1
$sCurrentRecv = TCPRecv($iSocket, 8192)
If @error <> 0 Then
ExitLoop
EndIf
If $sCurrentRecv <> '' Then
$sRecv &= $sCurrentRecv
EndIf
If TimerDiff($iTimer) >= $iTimeout Then
ExitLoop
EndIf
WEnd
TCPCloseSocket($iSocket)
Opt('TCPTimeout', $iOpt_TO)
Return StringRegExp($sRecv, '(?i)HTTP/\d.\d (200|30[1-2])') And Not StringRegExp($sRecv, '(?i)Server: Microsoft.*')
EndFunc
Func _GoogleTranslateString($sText, $sFrom, $sTo)
Local $sBound, $sPost, $sRecv, $sRet, $sConDis = 'Content-Disposition: form-data; name='
Local $iTimeout = 3000, $iPort = 80
$sBound = StringFormat('----------------%s%s%smzF', @MIN, @HOUR, @SEC)
$sPost &= $sBound & @CRLF
$sPost &= $sConDis & '"sl"' & @CRLF & @CRLF
$sPost &= $sFrom & @CRLF
$sPost &= $sBound & @CRLF
$sPost &= $sConDis & '"tl"' & @CRLF & @CRLF
$sPost &= $sTo & @CRLF
$sPost &= $sBound & @CRLF
$sPost &= $sConDis & '"js"' & @CRLF & @CRLF
$sPost &= 'y' & @CRLF
$sPost &= $sBound & @CRLF
$sPost &= $sConDis & '"prev"' & @CRLF & @CRLF
$sPost &= '_t' & @CRLF
$sPost &= $sBound & @CRLF
$sPost &= $sConDis & '"hl"' & @CRLF & @CRLF
;$sPost &= $sLangTo & @CRLF
$sPost &= StringLeft($sApp_Language, 2) & @CRLF
$sPost &= $sBound & @CRLF
$sPost &= $sConDis & '"ie"' & @CRLF & @CRLF
$sPost &= 'UTF-8' & @CRLF
$sPost &= $sBound & @CRLF
$sPost &= $sConDis & '"text"' & @CRLF & @CRLF
$sPost &= '' & @CRLF
$sPost &= $sBound & @CRLF
$sPost &= $sConDis & '"file"; filename="results.txt"' & @CRLF
$sPost &= 'Content-Type: text/plain' & @CRLF & @CRLF
$sPost &= BinaryToString(StringToBinary($sText, 4)) & @CRLF
$sPost &= $sBound & @CRLF
$sPost &= $sConDis & '"edit-text"' & @CRLF & @CRLF
$sPost &= $sBound & '--' & @CRLF
Local $iOpt_TO = Opt('TCPTimeout', $iTimeout)
Local $sName_To_IP = TCPNameToIP($sGoogleTranslate_Server)
Local $iSocket = TCPConnect($sName_To_IP, $iPort)
If $iSocket = -1 Then
TCPCloseSocket($iSocket)
Opt('TCPTimeout', $iOpt_TO)
Return SetError(-1, 0, 'Unable to connect to ' & $sGoogleTranslate_Server)
EndIf
Local $sCommand = 'POST /translate_f HTTP/1.1' & @CRLF
$sCommand &= 'Host: ' & $sGoogleTranslate_Server & @CRLF
$sCommand &= 'User-Agent: ' & $sUserAgent & @CRLF
$sCommand &= 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' & @CRLF
$sCommand &= 'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3' & @CRLF
$sCommand &= 'Connection: close' & @CRLF
$sCommand &= 'Content-Type: multipart/form-data; boundary=' & StringTrimLeft($sBound, 2) & @CRLF
$sCommand &= 'Content-Length: ' & StringLen($sPost) & @CRLF & @CRLF
$sCommand &= $sPost
TCPSend($iSocket, $sCommand)
While 1
$sRecv &= TCPRecv($iSocket, 8192)
If @error <> 0 Then
ExitLoop
EndIf
WEnd
TCPCloseSocket($iSocket)
Opt('TCPTimeout', $iOpt_TO)
$sRecv = BinaryToString(StringToBinary($sRecv), 4)
$sRet = StringRegExpReplace($sRecv, '(?is).*?<pre>(.*?)</pre>.*', '$1')
If @extended = 0 Then
$sRet = StringRegExpReplace($sRecv, '(?is).*?<title>(.*?)</title>.*', '$1')
EndIf
$sRet = _HTMLEntities_Decode($sRet)
If Not StringRegExp($sRecv, '^HTTP/1.1 200 OK') Then
Return SetError(1, 0, $sRet)
EndIf
Return SetExtended(StringRegExp($sTo, '(?i)^(Ar|Fa|Iw|Ur|Yi)$'), $sRet)
EndFunc