Pull to refresh

Перевод выделенного текста с любого языка на русский

Reading time 2 min
Views 62K
Хочу поделиться с вами своим лайфхаком.
В первую очередь он предназначен для людей, которым лень лезть в словарь всякий раз, когда они встречают незнакомое иностранное слово в тексте.

Я хочу рассказать, как получить перевод выделенного текста в виде оповещения рабочего стола.


У многих десктопных «словарей» есть функция для перевода выделения, которая как раз и предназначена для того, чтобы «не лазить в словарь», но почему-то у меня всегда были с ней проблемы: не переводит, когда нужно; переводит, когда не нужно и т.д.

Наверняка, многие из вас видели различные скрипты для использования google translate из консоли, но я считаю этот способ неудобным в большинстве случаев, не смотря на то, что предпочитаю CLI.

Я подумал, что неплохо было бы иметь возможность быстро переводить выделенный текст или слово и видеть результат, в виде оповещения рабочего стола.
Остаётся только совместить google translate cli + selections + notifications.

Решение


Очень простой интерфейс для отправки уведомлений из консоли предоставляет утилита notify-send, которую можно найти в пакете libnotify-bin. Пример:
notify-send 'title' 'message'
Даст следующий результат


Для получения текущего выделения в X Window System используется утилита xsel.
xsel -o
Выведет текущий selection в стандартный поток вывода.

Шаг 1
Устанавливаем необходимые пакеты:
sudo apt-get install libnotify-bin xsel
Я уверен, что каждый знает, как устанавливать пакеты в своей системе, поэтому не привожу примеры.

Шаг 2
Создаём файл с именем seltr и копируем в него следующие 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/:
sudo chmod 777 ./seltr && sudo mv ./seltr /usr/bin/

Шаг 4
Теперь остаётся назначить комбинацию клавиш на команду seltr(мой выбор — alt+5). Для этого можно воспользоваться стандартными сердствами, которые предоставляет ваша рабочая среда, либо использовать xbindkeys.

Как это работает


  • Выделяем какой-нибудь иностранный текст(на любом языке), в любом окне.
  • Нажимаем alt+5.
  • Получаем перевод.

Немного скриншотов


Английский

Немецкий

Французский

Украинский

Китайский


Плюсы и минусы


+ Возможность переводить фрагменты текста.
+ Требуется минимальное количество действий для получения перевода.
+ Поддержка практически всех языков.
+ Отсутствие необходимости в установке отдельных словарей.

- Не работает без подключения к интернету.
- Нет возможности выделить текст перевода.
*Проверенно в Unity, GNOME2, Xfce4, KDE4.
Tags:
Hubs:
+110
Comments 89
Comments Comments 89

Articles