Что нового

Переводчик Google

Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Единственный минус, это то что нельзя определить, является ли язык на который выполняется перевод RTL или нет...
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
CreatoR [?]
нельзя определить, является ли язык на который выполняется перевод RTL или нет...
Можно, ИМХО, составить список языков RTL и искать их в заголовке Content-Language.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
madmasles [?]
Можно, ИМХО, составить список языков RTL и искать их в заголовке Content-Language.
Так и сделал, только в заголовке искать незачем, мы же и так знаем на какой язык переводим :smile:.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
CreatoR,
Предлагаю немного изменить файл иконок флагов и их использование. В прикрепленном архиве пример того и другого.
 

Вложения

  • GetLangs.7z
    35.2 КБ · Просмотры: 8

_dron_

Знающий
Сообщения
84
Репутация
8
на http://dev.maxmind.com/geoip/legacy/geolite/ в "GeoLite Country" (CSV / zip) есть список языков по Ip адресу клиента :smile: можно автоматом по ip определять от куда у нас пользователь сидит (исключения - анонимный прокси)
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
madmasles [?]
Предлагаю немного изменить файл иконок флагов и их использование
Сложновато для разбора, я понял в чём идея, но хотел бы это применить без dictionary и в том же формате что я привык :smile:...
И ещё, там остаются пустые строки, а также нужно чтобы автоопределение было всегда сверху.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
CreatoR [?]
И ещё, там остаются пустые строки, а также нужно чтобы автоопределение было всегда сверху.
Не понял, где остаются пустые строки? Автоопределение у меня всегда сверху в Translate From.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
madmasles
Я вам советую поставить последнюю версию AutoIt, там было много изменений :smile:.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322

Вложения

  • 1.png
    1.png
    41.6 КБ · Просмотры: 38
  • 2.png
    2.png
    41.4 КБ · Просмотры: 22
  • 3.png
    3.png
    43 КБ · Просмотры: 21
  • 4.png
    4.png
    42.5 КБ · Просмотры: 27
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Видимо от версий это не зависит.
У меня вот так:
 

Вложения

  • Скриншот 2014-06-19 15.26.28.png
    Скриншот 2014-06-19 15.26.28.png
    25 КБ · Просмотры: 42

zabu

Новичок
Сообщения
14
Репутация
1
CreatoR сказал(а):
А почему именно Google, а не Yandex ?
Потому что Google переводит лучше.

Поскольку у меня большие сомнения на счет этого выкладываю вариант для Яндекс перевода. Не забудьте получить ключ чтобы все работало

Код:
$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



Добавлено:
Сообщение автоматически объединено:

Доступные варианты перевода:

{"dirs":["az-ru","be-bg","be-cs","be-de","be-en","be-es","be-fr","be-it","be-pl","be-ro","be-ru","be-sr","be-tr","bg-be","bg-ru","bg-uk","ca-en","ca-ru","cs-be","cs-en","cs-ru","cs-uk","da-en","da-ru","de-be","de-en","de-es","de-fr","de-it","de-ru","de-tr","de-uk","el-en","el-ru","en-be","en-ca","en-cs","en-da","en-de","en-el","en-es","en-et","en-fi","en-fr","en-hu","en-it","en-lt","en-lv","en-mk","en-nl","en-no","en-pt","en-ru","en-sk","en-sl","en-sq","en-sv","en-tr","en-uk","es-be","es-de","es-en","es-ru","es-uk","et-en","et-ru","fi-en","fi-ru","fr-be","fr-de","fr-en","fr-ru","fr-uk","hr-ru","hu-en","hu-ru","hy-ru","it-be","it-de","it-en","it-ru","it-uk","lt-en","lt-ru","lv-en","lv-ru","mk-en","mk-ru","nl-en","nl-ru","no-en","no-ru","pl-be","pl-ru","pl-uk","pt-en","pt-ru","ro-be","ro-ru","ro-uk","ru-az","ru-be","ru-bg","ru-ca","ru-cs","ru-da","ru-de","ru-el","ru-en","ru-es","ru-et","ru-fi","ru-fr","ru-hr","ru-hu","ru-hy","ru-it","ru-lt","ru-lv","ru-mk","ru-nl","ru-no","ru-pl","ru-pt","ru-ro","ru-sk","ru-sl","ru-sq","ru-sr","ru-sv","ru-tr","ru-uk","sk-en","sk-ru","sl-en","sl-ru","sq-en","sq-ru","sr-be","sr-ru","sr-uk","sv-en","sv-ru","tr-be","tr-de","tr-en","tr-ru","tr-uk","uk-bg","uk-cs","uk-de","uk-en","uk-es","uk-fr","uk-it","uk-pl","uk-ro","uk-ru","uk-sr","uk-tr"],"langs":{"ar":"Арабский","az":"Азербайджанский","be":"Белорусский","bg":"Болгарский","bs":"Боснийский","ca":"Каталанский","cs":"Чешский","da":"Датский","de":"Немецкий","el":"Греческий","en":"Английский","es":"Испанский","et":"Эстонский","fi":"Финский","fr":"Французский","he":"Иврит","hr":"Хорватский","hu":"Венгерский","hy":"Армянский","id":"Индонезийский","is":"Исландский","it":"Итальянский","ka":"Грузинский","lt":"Литовский","lv":"Латышский","mk":"Македонский","ms":"Малайский","mt":"Мальтийский","nl":"Голландский","no":"Норвежский","pl":"Польский","pt":"Португальский","ro":"Румынский","ru":"Русский","sk":"Словацкий","sl":"Словенский","sq":"Албанский","sr":"Сербский","sv":"Шведский","tr":"Турецкий","uk":"Украинский","vi":"Вьетнамский"}}


Добавлено:
Сообщение автоматически объединено:

Вариант с Google переводом работает у меня около трех секунд, с яндексом это миллисекунды. То есть в сотни раз быстрей.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
madmasles
У меня ваш пример с POST не переводит с auto.
Также не удаётся переводить с языков в юникод (например с Иврита).
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
CreatoR [?]
У меня ваш пример с POST не переводит с auto...
Похоже, надо с этими запросами разбираться более подробно, я же привел простой пример, который работает (тупо скопировал в код то, что показал сниффер при переводе файла).
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Это ошибка самого переводчика. Если указать файл (содержимое это текст на русском), и выбрать авто определение и переводить на английский, то выдаёт:
Страница, которую вы пытались перевести, уже переведена на английский.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Обновление...

v0.5
+ Добавлена опция "Переводить по мере набора текста".
* Убрано ограничение символов при переводе (спасибо madmasles).
* Улучшена обработка изменения языка.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Обновление...

v0.6
+ Добавлена опция "Переводить по выделению".
+ Добавлена опция "Проговорить" текст (используя Yandex SpeechKit Cloud).
+ Добавлен диалог настроек (с базовыми опциями).
+ Добавлен диалог "О программе".
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Обновление...

V0.7
* Исправлена проблема с не сохранением выбранного Голоса в настройках.
* Голос теперь можно выбрать даже если опция "Переводить по выделению" отключена.
 

mr_Gleb

Новичок
Сообщения
2
Репутация
0
Уважаемый Автор и форумчане!
Помогите, пожалуйста, вытянуть из исходников этой программы рабочую функцию перевода. :(
Так что функция с параметрами _Func('Текст для перевода', 'язык на который переводить') возвращает переведенный текст.
Длина текста не большая (до 100 знаков), язык - автоопределение, желательно подсунуть Encoding.au3 и HTMLEntities.au3, т.к. текст вырезается из исходника HTML (в основном Китайский язык).
Сам целый день сидел, пытался подправить код этой проги :whistle:, чтобы она заработала без компиляции и без GUI - ничего не получилось (виснет). :scratch:
Заранее всем спасибо!
 

mr_Gleb

Новичок
Сообщения
2
Репутация
0
Сидел, правил, кодил - одинфик не работает:
_Func _GoogleTranslateServerIsOnline() - выдает пустую строку
_GoogleTranslateString($sText, 'auto', 'ru') - Unable to connect to translate.googleusercontent.com
Кто "шарит" в чем проблема, помогите исправить!

Вот что получилось:
Код:
#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
 
Верх