Go to content Go to menu Go to search

Перевод выделенного текста на другой язык под 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)";
}


при публикации материалов с данного сайта обратная ссылка на сайт обязательна.
valynkin.ru © no rights reserved