Перевод выделенного текста на другой язык под linux
Update:
Данный способ устарел, т.к. yandex-api стал платный.
Постановка задачи
Приведенный скрипт переводит текст, находящийся в буфере обмена на русский при помощи yandex-api, и выводит перевод в области уведомлений.
У меня данный скрипт вызывается по сочетанию <control>+<q>
Зависимости
linux приложения:
notify-send xsel
perl модули:
use XML::Simple; use LWP::UserAgent; use Data::Dumper;
Для доступа к yandex-api нужен ключ, который можно получить на странице API Перевода (бесплатно)
Скрипт:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | #!/usr/bin/perl use XML::Simple; use LWP::UserAgent; use Data::Dumper; #binmode(STDOUT,':utf8'); $notify_timeout_msec=5000; $YANDEX_KEY="*********************"; # Get string to translate $string_to_translate = `xsel -o`; if ($string_to_translate eq "") { system "notify-send -t $notify_timeout_msec NOPE"; exit; }; # Connect to yandex and translate string $request="https://translate.yandex.net/api/v1.5/tr/translate?key=$YANDEX_KEY&text=$string_to_translate&lang=ru"; my $ua = LWP::UserAgent->new; $ua->agent("VpsTranslator/0.1 "); my $req = HTTP::Request->new(GET => $request); my $res = $ua->request($req); # show result in pop-up if ($res->is_success) { $result = $res->content; my $translated = XMLin ($result); system "notify-send -t $notify_timeout_msec '$string_to_translate' '$translated->{text}'"; } else { system "notify-send -u critical $res->status_line"; system "notify-send -u critical Dumper($translated)"; } |