Что нового

Использовние яндекс-переводчика

saraconor

Новичок
Сообщения
357
Репутация
2
Приведите пожалуйста пример как можно допустим текст в буфере обмена перевести с английского на русский с помощью яндекс-переводчика.
Где-то на форумен найден такой пример:
Код:
$YA_KEY = "trnsl.1.1.20190528T070436Z.9131472d27ee4856.e2068dd9818535b8b49b531d12abb1046769f236";http://api.yandex.ru/key/keyslist.xml
ConsoleWrite(YaTranslate("Hello, how are you?", "en")&@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

Вроде работает, но что-то с кодировкой.
 

AZJIO

Меценат
Меценат
Сообщения
2 751
Репутация
1 146
Обязательно программно? QTranslate имеет возможность задать горячую клавишу на функцию перевода буфера обмена. А также можно задать горячую клавишу на функцию перевода выделенной строки со вставкой взамен выделенной. Сервис яндекса в нём есть (и куча других более продвинутых).
 
Автор
S

saraconor

Новичок
Сообщения
357
Репутация
2
Очень желательно программно.
 

idbehold

Новичок
Сообщения
37
Репутация
2
Ответ приходит в кодировке utf.
В BinaryToString нужно указать флаг $SB_UTF8 вторым параметром

Код:
#include <StringConstants.au3>

$YA_KEY = "YOU_KEY";http://api.yandex.ru/key/keyslist.xml
ConsoleWrite(YaTranslate("Hello, how are you?", "ru")&@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), $SB_UTF8)
    If $xml == "" Then Return ""
    $arr = StringRegExp($xml, '(?i)<text>(.*?)</text>', 1)
    If UBound($arr) > 0 Then Return $arr[0]
    Return ""
EndFunc
 

pvnn

Осваивающий
Сообщения
279
Репутация
29
А если нужно с русского на английский, то нужно текст предварительно перевести в UTF8.
И лучше указать полностью с какого на какой язык переводите: "en-ru" "ru-en"

Код:
$YA_KEY = "YOU_KEY";http://api.yandex.ru/key/keyslist.xml
MsgBox(0,'',YaTranslate("Hello, how are you?", "en-ru"))
MsgBox(0,'',YaTranslate(_Encoding_ANSIToUTF8("Привет, как дела?"), "ru-en"))

Func YaTranslate($text, $lang="en-ru")
    $url = "https://translate.yandex.net/api/v1.5/tr/translate?format=plain&key="&$YA_KEY&"&text="&$text&"&lang="&$lang
    $xml = BinaryToString(InetRead($url),4 ) ; $SB_UTF8
    If $xml == "" Then Return ""
    $arr = StringRegExp($xml, '(?i)<text>(.*?)</text>', 1)
    If UBound($arr) > 0 Then Return $arr[0]
    Return ""
EndFunc

Func _Encoding_ANSIToUTF8($sString)
	Return BinaryToString(StringToBinary($sString, 4))
EndFunc
 
Автор
S

saraconor

Новичок
Сообщения
357
Репутация
2
а как вывести несколько вариантов перевода, если допустим одно слово "window" переводится?
(окно, окошко, стекло, иллюминатор, витрина, форточка) - как в таком виде вывести перевод?
 
Верх