На прошлой недели я наткнулся на программу для windows, которая использовала для перевода текста гугл транслейт. Достаточно выделить текст в любом окне, нажать комбинацию клавиш и перевод готов (P.S.: эту программу можно найти на dicter.ru). Принцип работы показался очень простым и я решил на выходных написать свой собственный скрипт. Однако меня опередили. В конце недели выложили в сеть скрипт, который умеет сам определять язык исходного текста и переводить его на русский (или любой другой язык), используя переводчик гугла, а результат появляется во всплывающем уведомлении. Так что эта статья будет просто пересказ статьи с хабра (
В начале установим необходимый софт, что бы всё работало:
sudo apt-get install xclip
Вот и всё. Так же нам понадобится программа для отправки уведомлений… В гном это libnotify-bin (уже установлена по умолчанию… обычно), а в kde — kdialog… и она тоже должна быть изначально.
Затем создаём текстовый документ в любом удобном для себя месте (лично мне удобней в папке ~/bin), и помещаем в него следующий текст…
Данный вариант рассчитан на gnome (unity и всякие xfce тоже подходят) пользователей:
#!/bin/bash
a=`wget -U "Mozilla/5.0" -qO - "http://translate.google.com/translate_a/t?client=t&text=$(xclip -o | sed "s/[\"'<>]//g")&sl=auto&tl=ru" | sed 's/\[\[\[\"//' | cut -d \" -f 1`
notify-send -u critical "$a"
echo $a | xclip -selection clipboard
KDE вариант будет выглядеть так:
#!/bin/bash
a=`wget -U "Mozilla/5.0" -qO - "http://translate.google.com/translate_a/t?client=t&text=$(xclip -o | sed "s/[\"'<>]//g")&sl=auto&tl=ru" | sed 's/\[\[\[\"//' | cut -d \" -f 1`
kdialog --title "Перевод" --passivepopup "$a"
echo $a | xclip -selection clipboard
KDE вариант не тестировал, так что возможно он не совсем точен.
Оригинальный скрипт, который использован в статье на хабре выглядит так:
#!/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)"
Во всех трёх вариантах следует обратить внимание на «sl=auto&tl=ru». Здесь «auto» обозначает, что язык исходного текста гугл будет пытаться определить сам, а «ru» отвечает за язык полученного перевода. Если вам нужен, например, английский, то поставьте «en» за место «ru».
Мой вариант отличается тем, что использует xclip заместо xsel, что позволяет загонять перевод в буфер обмена (т.е. появляется и уведомление и он же будет у вас в буфере обмена… удобно если нужно кому-то его отправить).
Так же первый вариант не показывает оригинальный текст во всплывающем уведомлении. Имхо, это никому не нужно.
Когда вставите понравившийся вам код, то не забудьте сохранить файл и сделать его исполняемым. Это можно сделать в его свойствах или выполнив команду:
chmod +x /путь/к/файлу
Остаётся привязать его к комбинации клавиш. Для этого можно воспользоваться программой xbindkeys (узнал о ней из оригинальной статьи). Или воспользоваться стандартными методами самой системы. в mint и ubuntu — это «клавиатура».
Как видно, я назначил комбинацию — Alt+A.
Теперь достаточно выделить какой-либо фрагмент текста и нажать нужную комбинацию и перевод не заставит себя долго ждать.
Так же перевод поместился и в буфер обмена и его можно достать, нажав ctrl+c. А само уведомление будет висеть, пока по нему не кликнешь. Это происходит благодаря флагу «-u critical». Если не нравится, то можно его стереть.
Советую иногда поглядывать на комментарии к
А на кедах будет работать? Переводчиком пользуюсь оооочень часто.
Код, который воложен для кед, должен работать. Если нет, то можно попробовать открыть терминал, выделить текст мышкой и запустить скрипт, чтобы узнать в чём ошибка
переводчиком обычно не пользуюсь, но из статьи узнал кое-что новое=)
P.S. зачем Ctrl+D на сви (а что это?)? он же посылает в консольку EOF (на баше вызывает exit).
не понравилось только, что нельзя вставить Shift+Insert
swi это http://tuksik.ru/switch-word/ :)
А о выше названных сочетаниях я не знал… видимо не так уж они мне и важны.
А на счёт Shift+Insert, так можно поискать аналоги xclip… хотя может и в нём самом есть эта функция, мануал особо тщательно не читал.
Если в системе нет Мозиллы, а только Хромиум будет ли работать скрипт? Спрашиваю потому, что не получилось запустить в Лубунту.
wget -U "Mozilla/5.0"
«-U, —user-agent=АГЕНТ идентифицировать себя как АГЕНТ вместо Wget/ВЕРСИЯ»
Это он просто прикидывается этим браузером. Например, можно заменить вышеописанную строчку на
wget -U "Konqueror"
и тоже будет работать (только что проверил, а этого брузера у меня нет).А что бы понять, что именно скрипту не нравится, можно запустить его из терминала (./имя_скрипта). Только предварительно нужно выделить в самом терминале любой текст мышкой, лучше английский. Для этого можно послать команду:
echo "Hello, word"
:):~$ «Hello, word»
Hello, word: команда не найдена
:~$ cd .bin
:~/.bin$ ls
kuku kukushka.wav translate
:~/.bin$ translate
Программа ‘translate’ на данный момент не установлена. Вы можете установить ее, напечатав:
sudo apt-get install translate
:~/.bin$ блин
блин: команда не найдена
Что я делаю не так?
:)
Синтаксис командной строки примерно следующий: команда опции ключи
Например, если просто отправить
«Hello, word»
или"блин"
, то терминал будет искать эту команду в папках /bin, /usr/bin и подобных.Если после команды идёт пробел, то он подключает опции.
Например,
cd .bin
. cd — команда перехода, а .bin — папка (причём скрытая, раз начинается с точки).А сочетание символов
./
обозначает, что он попытается запустить файл (аналог двойного клика по exe файлу в windows). значит нужно писать неtranslate
, а./translate
. И ещё, файл нельзя выполнить, если у него нет соответствующих прав. Что бы их дать можно выполнить команду:chmod +x translate
А в первом случае вы
echo
забыли.Конечно, то что я написал выше не совсем точно и красноглазики могут взбунтоваться, но имхо, для новичков должно быть понятное объяснение :)
Заработало!
Большое человеческое спасиба!
Еще не все выяснил. :) Подскажите как путь прописать до скрипта для запуска с комбинации клавиш?
translate пере назвал в perevodilka. Мой /home/asa/.bin/perevodilka не срабатывает и /home/asa/.bin/./perevodilka тоже.
Все работает вопрос снят, сам не туда писал ))
Спасибо!
Я рад, а то уже начал изучать xbindkeys и уже писал развёрнутый комментарий, как им пользоваться. Ну ладно, будет новая тема для очередной статьи :)
Да да многим поможет.
Да тут одни спецы походу=) Одно название блога у меня уже мурашки вызывает=)
Ну, именно на «спецов» и был расчёт, когда создавался блог. Кстати, за неделю до появления первой статьи я даже не знал, что такое bash… точнее, думал, что это цитатник :)
Работает на Unity отлично,спасибо очень хорошая статья.
http://pastebin.com/kPTYjY6W
удобный переводчик, в основном преднозначенный для перевода с английского и для тех кто изучает английский!
статью не читал.
Произошла ошибка при запуске программы transya:
Не удалось выполнить процесс-потомок «transya» (Нет такого файла или каталога)
В чем тут дело ?
Спасибо за скрипт, использовал больше года без проблем. Правда, в последние пару месяцев он начал работать с переменным успехом (порой перевод появляется только после 3-4 нажатий).
А на днях переустановил Ubuntu и перевод выделенного текста совсем перестал работать (естественно, сам скрипт я снова положил и клавиши назначил). Видно, что комбинация срабатывает, а уведомление с переводом не появляется. То ли я чего не доставил, то ли у Google Translate поменялись алгоритмы.
У вас скрипт по-прежнему работает?