Для начала нужно залогиниться в Яндекс и получить ключ. Ключ генерируется моментально, никто никаких допросов не устраивает и ничего ждать не надо. Само собой, перед этим надо прочитать и принять пользовательское соглашение.
Ну а дальше всё просто:
#!/bin/sh
key="вставляем сюда свой ключ API"
text="$(echo $(xsel -o) | sed "s/[\"\'<>]//g")"
translate="$(wget -qO - "https://translate.yandex.net/api/v1.5/tr.json/translate?key=$key&text=$text&lang=ru")"
notify-send -u critical "$text" "$(echo $translate | sed 's/.*\[\"\(.*\)\"\].*/\1/')"
Конечно, можно сделать всё куда красивей: и со вставкой перевода в буфер обмена, и с красивым парсером ответа (Яндекс может отдавать как JSON[P], так и XML), и с более вдумчивой предварительной обработкой текста, и с бОльшими фрагментами в POST, и с прочими радостями. Но это уже дело вкуса. А подробное обсуждение юзкейсов и разные реализации есть в исходной статье.
UPD:
sperson подсказывает, что есть trans. По сути это продвинутая обёртка для того же гуглтранслейта, которая и препроцессинг текста делает, и постпроцессинг, и прокси позволяет задавать, и много чего полезного. Так что если устраивает гугл, то всё ещё проще:
#!/bin/sh
notify-send -u critical "$(xsel -o | trans -no-ansi -l ru)"
На выходе:
Комментарии (15)
dcc0
19.04.2015 15:37OnTranslator
Каптчу не просит
ontranslator.com
Но он под Windows, под wine запускал, но не помню, корректно ли он работает.
Stardict еще вроде может выделенный текст.
Но тем не менее, спасибо. Не очень удобный переводчик — одна из причин, почему чаще надо под Win сидеть.
AndersonDunai
20.04.2015 04:31Пользуюсь самописной утилитой, работающей через гугловский интерфейс, а для обхода большинства защит, в том числе капч и печенек представляюсь как IE 6.0. Работает через
mechanize
.
Если кому интересно — вот утилита.kloppspb Автор
20.04.2015 13:37+1Судя по PATTERN и url желание заюзать API было :)
К сожалению, через mechanize в этом случае не вытаскиваются «варианты перевода» (см. скриншот у меня под катом).
Angel2S2
21.04.2015 17:46Спасибо за скриптец. Запилил себе. Значительно удобнее стало работать :)
echo тут излишен и только усложняет код и создает лишний вызовtext="$(echo $(xsel -o) | sed "s/[\"\'<>]//g")"
Все прекрасно и без него работает:
text="$(xsel -o | sed "s/[\"\'<>]//g")"
kloppspb Автор
21.04.2015 18:11А, ну да. Последствия последовательного сокращения многострочника :)
Angel2S2
23.04.2015 22:22Спасибо за идею. Запилил по себя поуниверсальнее. Вот что вышло. Может кому пригодится.
kloppspb Автор
25.04.2015 13:29С Яндексом не всё так просто. Есть ещё сервис для получения словарных статей, аналогичный переводу: tech.yandex.ru/dictionary Но эти два сервиса не могут работать вместе, как в гугле :( А может и :) — кому-то лаконичный перевод нужен в выделение, а кому-то подробная статья в пузыре…
dvapelnik
07.05.2015 16:06недавно заметил, что у меня не работает переводчик, который указан в посте, и наколбасил что-то подобное на питоне, но с определением языка: если выделен русский текст, то переводит на английский, если другой, то определяет язык и переводит на русский. результат перевода добавляется в буфер обмена (на всякий случай)
gist.github.com/dvapelnik/6f06e6467de8416867aa
sperson
Без ключей, без регистрации, без смс и гораздо более функциональней:
kloppspb Автор
Так это же обёртка гуглтранслейта.
sperson
Ну да. Я так понял, вы от того скрипта отказались потому что «разбираться было лень». Тут разбираться не нужно — всё работает «out of the box». Каждый день на протяжении полугода использую и никаких проблем пока не было.
buddax2
а как он борется с капчей?
kloppspb Автор
Присмотрелся к trans, в нём используется другой гугловский URL. В скрипте boo1ean спрашивается /translate_a/t?, здесь — /translate_a/single? Ну и в любом случае можно указывать прокси, возможно, какой-нибудь TOR поможет.
BelBES
Ну и чтобы при помощи этой утилиты можно было переводить выделенный текст в emacs