Хочу поделиться с вами своим лайфхаком. В первую очередь он предназначен для людей, которым лень лезть в словарь всякий раз, когда они встречают незнакомое иностранное слово в тексте.
Я хочу рассказать, как получить перевод выделенного текста в виде оповещения рабочего стола.
У многих десктопных "словарей" есть функция для перевода выделения, которая как раз и предназначена для того, чтобы «не лазить в словарь», но почему-то у меня всегда были с ней проблемы: не переводит, когда нужно; переводит, когда не нужно и так далее.
Наверняка, многие из вас видели различные скрипты для использования google translate из консоли, но я считаю этот способ неудобным в большинстве случаев, не смотря на то, что предпочитаю CLI.
Я подумал, что неплохо было бы иметь возможность быстро переводить выделенный текст или слово и видеть результат, в виде оповещения рабочего стола. Остаётся только совместить google translate cli + selections + notifications.
Решение
Очень простой интерфейс для отправки уведомлений из консоли предоставляет утилита notify-send, которую можно найти в пакете libnotify-bin. Пример:
1
|
notify
-
send
`
title
`
`
message
`
|
Даст следующий результат:
Для получения текущего выделения в X Window System используется утилита xsel.
1
|
xsel
-
o
|
Выведет текущий selection в стандартный поток вывода.
Шаг 1
Устанавливаем необходимые пакеты:
1
|
sudo
apt
-
get
install
libnotify
-
bin
xsel
|
Я уверен, что каждый знает, как устанавливать пакеты в своей системе, поэтому не привожу примеры.
Шаг 2
Создаём файл с именем seltr и копируем в него следующие 2 строки:
1
2
|
#!/usr/bin/env bash
notify
-
send
-
u
critical
"$(xsel -o)"
"$(wget -U "
Mozilla
/
5.0
" -qO - "
http
:
//translate.google.com/translate_a/t?client=t&text=$(xsel -o | sed "s/["`<>]//g")&sl=auto&tl=ru" | sed `s/[[["//` | cut -d " -f 1)"
|
Параметр -u critical нужен для того, чтобы оповещение могло перекрывать любые окна.
Параметры запроса google translate:
-
text=$(xsel -o | sed "s/["
]//g")
- исходный текст - текущий selection с вырезанными и " - sl=auto - автоопределение исходного языка
- tl=ru - язык результата - русский
Шаг 3
Делаем этот файл исполняемым и перемещаем его в /usr/bin/:
1
|
sudo
chmod
777
.
/
seltr
&&
sudo
mv
.
/
seltr
/
usr
/
bin
/
|
Шаг 4
Теперь остаётся назначить комбинацию клавиш на команду seltr (мой выбор - alt+5). Для этого можно воспользоваться стандартными сердствами, которые предоставляет ваша рабочая среда, либо использовать xbindkeys.
Как это работает:
- Выделяем какой-нибудь иностранный текст(на любом языке), в любом окне
- Нажимаем alt+5
- Получаем перевод
Немного скриншотов
Английский
Немецкий
Французский
Украинский
Китайский
Плюсы такого метода:
- Возможность переводить фрагменты текста
- Требуется минимальное количество действий для получения перевода
- Поддержка практически всех языков
- Отсутствие необходимости в установке отдельных словарей
Минусы:
- Не работает без подключения к интернету
- Нет возможности выделить текст перевода
Проверенно в Unity, GNOME2, Xfce4 и KDE4.
Источник: habrahabr.ru.
Так же приведу другой вариант скрипта, который делает всё то же самое, но плюс ещё копирует перевод в буфер обмена.
1
2
3
4
5
|
#!/usr/bin/env bash
text
=
"$(xsel -o)"
translate
=
"$(wget -U "
Mozilla
/
5.0
" -qO - "
http
:
//translate.google.com/translate_a/t?client=t&text=$(xsel -o | sed "s/["`<>]//g")&sl=auto&tl=ru" | sed `s/[[["//` | cut -d " -f 1)"
echo
"$translate"
|
xclip
-
selection
clipboard
# копировать перевод в буфер
notify
-
send
-
u
critical
"$text"
"$translate"
# вывести уведомление
|
Приятного пользования.