Комментарии 89
Эм… Wellcome?
0
Так вот чего мне не хватало! Спасибо, очень удобная вещь!
+3
Работает! :)
Спасибо, пригодится
Спасибо, пригодится
+4
А как оно с гуглопереводчиком связывается? Translate API вроде платный же сейчас?
0
Ещё два минуса (вторая вообще ко всем таким программам, что перепробовал):
— нет возможности (не описана?) забиндить просто на события выделения мышью только в некоторых прогах
— нет возможности настроить размер шрифта.
Объясню юз-кейс: часто читаю книги и статьи с экрана, лёжа на диване и пользуясь беспроводной мышью для листания и т. п. Естественно шрифт/масштаб ставлю покрупнее чем когда сижу за компом, но вот большинство переводчиков/словарей выводят фиксированным шрифтом и их всплывающие окна с переводом даже не реагируют на увеличение шрифта их основного окна.
— нет возможности (не описана?) забиндить просто на события выделения мышью только в некоторых прогах
— нет возможности настроить размер шрифта.
Объясню юз-кейс: часто читаю книги и статьи с экрана, лёжа на диване и пользуясь беспроводной мышью для листания и т. п. Естественно шрифт/масштаб ставлю покрупнее чем когда сижу за компом, но вот большинство переводчиков/словарей выводят фиксированным шрифтом и их всплывающие окна с переводом даже не реагируют на увеличение шрифта их основного окна.
0
Чаще всего переводить приходится текст в браузере, для браузера есть уже специальные расширения, где можно переведенный текст выделить и пр. Ну если вне браузера что-то нужно что-то глянуть, то такой скриптик может и понадобится конечно.
+1
Ну мне, например, чаще PDF приходится читать. С английским нет проблем, а вот остальные…
+2
Вот так, тупо в лоб, должно работать:
echo >> ~/notes.txt && echo >> ~/notes.txt && date >> ~/notes.txt && xsel -o >> ~/notes.txt && echo >> ~/notes.txt && notify-send "Эаметка добавлена" "$(xsel -o)"
+1
Сорри, не вам…
0
НЛО прилетело и опубликовало эту надпись здесь
Очередное «спасибо» автору, а я сижу теперь и пилю скрипт для использования в качестве общесистемных заметок. Чтобы по хоткею выделенный текст добавлялся в специальный файлик, по типу «добавить в заметки» в Опере.
+2
О! Меня такая же мысль посетила.
Дату, время, да текст. Скрипт простой выйдет. Доберусь до дома — сделаю.
Дату, время, да текст. Скрипт простой выйдет. Доберусь до дома — сделаю.
+2
Вот, писал вам, промахнулся: habrahabr.ru/blogs/linux/137215/#comment_4569017
+4
У меня в Debian testing c Xfce4 notify-send не заработал :-( ничего не показывает. Покопаюсь в логах…
0
Google Translator для краснопанды как-то привычнее. Не особо люблю, когда в уведомлениях что-то всплывает лишнее.
0
Для возможности копирования перевода можно использовать:
zenity --info --title=«Титл» --text=«текст»
или загонять перевод сразу в буфер
zenity --info --title=«Титл» --text=«текст»
или загонять перевод сразу в буфер
0
использовать например для работы с буфером xclip
0
Это понятно, но просто не хочется всякий раз при переводе слова затирать буфер, ведь там может лежать что-то нужное. Если бы это было критически необходимо, я бы лучше сделал 2 команды на разные shortcut-ы:
1 — без записи в буфер.
2 — с записью.
1 — без записи в буфер.
2 — с записью.
0
Версия с копированием в буфер перевода:
#!/usr/bin/env bashtext="$(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
+1
Съело энтер:
#!/usr/bin/env bash
text="$(xsel -o)"
...
+1
сори, так переводит только первое слово. Выкладываю рабочую версию
+1
великолепно! спасибо.
+1
оффтоп, но может кто знает утилиту, аналогичную xsel, но способную достать не только текст, но и картинки/ссылки/другие объекты из выделения?
0
Было бы еще хорошо направление перевода определять по текущей раскладке. Например при английской раскладке — переводить текст на английский, при русской — на русский соответственно и т.д.
0
Подобное использую под Win translateclient.com/ru/
0
Супер, спасибо большое!
+1
вдохновившись идеей (мерси за оную кстати, крайне полезная) и необходимостью поисследовать Питон (пардон если код, эмм, неоптимален и излишен), сваял быстрое дополнение для вывода более подробного перевода.
Запуск выглядит так:
a сам скрипт /path/to/tran.py вот так:
результат примерно таков:
Запуск выглядит так:
notify-send -u critical "$(xsel -o)" "$(python /path/to/tran.py "$(xsel -o | sed "s/[\"'<>]//g")")"
a сам скрипт /path/to/tran.py вот так:
import httplib, urllib, argparse, re
def argparser():
parser = argparse.ArgumentParser(description='Instant Translator')
parser.add_argument('phrase', metavar='p', type=str,
help='phrase to translate')
args = parser.parse_args()
return args.phrase
def retrieve(host, path):
request = httplib.HTTPConnection(host)
request.request("GET", path, "", {'User-Agent' : 'Mozilla/5.0'})
response = request.getresponse()
if response.status > 200:
return '[["{}"],"ERROR"]'.format(response.reason)
return response.read()
def parse_item(item, depth = 0):
if type(item) is str:
if len(item) == 0:
return ''
return "{}{}\n".format("\t" * depth, item)
result = ''
for sub_item in item:
result += parse_item(sub_item, depth + 1)
return result
phrase = argparser()
host = 'translate.google.com'
URL = 'translate_a/t?client=t&sl=auto&tl=ru&' + urllib.urlencode({'text' : phrase})
response = re.sub(',{2,}', ',', retrieve(host, "/" + URL))
try:
translated = eval(response)
result = ''
for item in translated:
if type(item) is str:
result = "Translation: {} > ru\n\n{}".format(item, result)
break
result += parse_item(item, -1)
print result
except RuntimeError as ex:
print "Something went wrong ({}): {}".format(response, ex)
результат примерно таков:
+4
Я до питона еще не добрался, так что подсказывайте :)
ImportError: No module named argparse
0
argparse, похоже, довольно новый класс — но он там «чисто для понта» — начало можно переписать через простые аргуметны комстроки, как
import httplib, urllib, re, sys
def argparser():
return sys.argv[1]
def retrieve(host, path):
request = httplib.HTTPConnection(host)
...
0
Сделал так (что было закомментил):
Traceback (most recent call last):
File "/home/ploop/tran.py", line 23, in response = re.sub(',{2,}', ',', retrieve(host, "/" + URL))
File "/usr/lib/python2.6/re.py", line 151, in sub
return _compile(pattern, 0).sub(repl, string, count)
TypeError: expected string or buffer
No summary specified.
0
в 2.6 как-то format не так работает — переписал с конкатенацией, запустилось на Питоне 2.6.6 (и даже, если переделать ловлю ексепшна в конце как
на 2.4
попробуйте плиз:
except RuntimeError:
print "Something went wrong ({})".format(response)
на 2.4
попробуйте плиз:
import httplib, urllib, re, sys
def argparser():
return sys.argv[1]
def retrieve(host, path):
request = httplib.HTTPConnection(host)
request.request("GET", path, "", {'User-Agent' : 'Mozilla/5.0'})
response = request.getresponse()
if response.status > 200:
return '[["{}"],"ERROR"]'.format(response.reason)
return response.read()
def parse_item(item, depth = 0):
if type(item) is str:
if len(item) == 0:
return ''
return ("\t" * depth) + item + "\n"
result = ''
for sub_item in item:
result += parse_item(sub_item, depth + 1)
return result
phrase = argparser()
host = 'translate.google.com'
URL = 'translate_a/t?client=t&sl=auto&tl=ru&' + urllib.urlencode({'text' : phrase})
response = re.sub(',{2,}', ',', retrieve(host, "/" + URL))
try:
translated = eval(response)
result = ''
for item in translated:
if type(item) is str:
result = "Translation: " + item + " > ru\n\n" + result
break
result += parse_item(item, -1)
print result
except RuntimeError as ex:
print "Something went wrong ({}): {}".format(response, ex)
0
запуск слизнуло — там всё как в оригинальном решении, notify-send -u critical "$(xsel -o)" "$(python /home/halien/devel/my/python/tran.py "$(xsel -o | sed «s/[\»'<>]//g")")"
0
Для консольного перевода в Linux есть программа dict.
0
Stardict отлично переводит выделенные слова по нажатию клавиши Win, давно пользуюсь — всё работает
0
Для CentoOS5 rpm пакет xsel не найден ((
пришлось собрать (i386) t.co/Gr2OKXeI, (src.rpm) t.co/W0B8asbY
пришлось собрать (i386) t.co/Gr2OKXeI, (src.rpm) t.co/W0B8asbY
+1
Идея не плоха, и реализовать не сложно, но, может быть, Вы не пробовали GoldenDict? (не рекламы ради)
Сам пробовал разные подобные словари, но у многих есть свои «особенности», остановился на этом варианте, так как работает нормально, словари неплохи (поддерживает много форматов), по нажатию нужной клавиши показывает перевод.
Сам пробовал разные подобные словари, но у многих есть свои «особенности», остановился на этом варианте, так как работает нормально, словари неплохи (поддерживает много форматов), по нажатию нужной клавиши показывает перевод.
0
> sudo chmod 777 ./seltr
Страсти какие а
> sudo chmod +x ./seltr
не судьба?
+2
В качестве альтернативы описанному методу — GoldenDict по хоткею выдает всплывающее окно с переводом. В нем отсутствуют указанные минусы.
Правда, его нужно предварительно настроить (как минимум, добавить необходимые словари). Зато к нему можно подключать множество форматов словарей (в том числе от Lingvo, и в том числе многие онлайновые). Имхо, лучший словарь из существующих под Linux — удобный, функциональный и стабильный.
Правда, его нужно предварительно настроить (как минимум, добавить необходимые словари). Зато к нему можно подключать множество форматов словарей (в том числе от Lingvo, и в том числе многие онлайновые). Имхо, лучший словарь из существующих под Linux — удобный, функциональный и стабильный.
0
Сорри, вкладка со статьей долгое время была открыта и комментария выше (через один от моего) не видел.
0
Шрифт у этого всплывающего окна дюже мелкий :(
0
В основном окне «Ctrl»+«+» несколько раз (либо в меню «View — Zoom — Zoom in», либо соответствующие значки на панели) — и проблемы больше нет ;)
+2
Спасибо за метод, на lxde под ubutu работает
0
Подскажите, какой шрифт используется в оповещениях, внезапно очень нравится.
+1
мне кажется что эта ссылка поможет ответить на ваш вопрос — font.ubuntu.com/
0
Текст можно скопировать из уведомления?
0
В ubuntu — нет. При наведении мышью уведомление размазывается и становится прозрачным, чтобы за ним был доступен интерфейс.
Обратите внимание на мой скриншот на несколько постов выше — приходится намеренно выделять область больше, чтобы не размазалось, ближе мышь не подведёшь, а делать полный скриншот экрана и редактировать лень.
Обратите внимание на мой скриншот на несколько постов выше — приходится намеренно выделять область больше, чтобы не размазалось, ближе мышь не подведёшь, а делать полный скриншот экрана и редактировать лень.
0
Ubuntu + GNOME Shell, полёт нормальный. Спасибо!
0
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Если сделать два подряд перевода, то вторая нотификация ждет пока закроется первая. Как то можно сделать, что бы они не ждали а выводились подряд, несколькими штуками?
0
Прикрутил, спасибо! Вот только интересно: если излишне часто пользоваться, Гугл не забанит? :)
0
В LibreOffice не удается получить выделенную фразу.
Xsel возвращает только первое слово или обрывки фраз. Кто-то знает как решить проблему?
text="$(xsel -o)"
Xsel возвращает только первое слово или обрывки фраз. Кто-то знает как решить проблему?
0
Здравствуйте друзья, вашему вниманию представляю код на руби, формирующий файл словаря, чтобы повторять переводимые слова перед сном. Код также кеширует все запросы в гугл (это к вопросу а не забанит ли гугл). Также имеется установщик.
github.com/newmen/gnome_google_translator
Может быть, кому-нибудь ещё понадобятся эти «навороты»… ;)
github.com/newmen/gnome_google_translator
Может быть, кому-нибудь ещё понадобятся эти «навороты»… ;)
+2
Признаться, к сожалению так и не нашёл порядочной документации, в которой рассказывалось бы о том, как таки правильно создавать все эти директории и файлы. В официальной документации говорится (http://projects.gnome.org/gconf/), что всё должно быть так то и так-то, но с Gnome3, оно как-то не совсем так. Поэтому я пошёл по пути наименьшего сопротивления.
Но вообще, спасибо за проявленный интерес. Может быть когда-нибудь я дорасту до gconftool-2. (=
Но вообще, спасибо за проявленный интерес. Может быть когда-нибудь я дорасту до gconftool-2. (=
0
Модифицировал скрипт, теперь он умеет:
— конвертировать не только выделенный текст но и последнее набранное слово (по триггеру Ctrl+Shift_Left);
— при переключении раскладки автоматом переключает язык ввода (укажите свою комбинацию клавиш в последней строке);
Тригеры клавиш переписал на xdotool — работает более шустро и стабильно.
Сам скрипт.
— конвертировать не только выделенный текст но и последнее набранное слово (по триггеру Ctrl+Shift_Left);
— при переключении раскладки автоматом переключает язык ввода (укажите свою комбинацию клавиш в последней строке);
Тригеры клавиш переписал на xdotool — работает более шустро и стабильно.
Сам скрипт.
+1
уже не работает :(
0
НЛО прилетело и опубликовало эту надпись здесь
работает тока URL изменился
#!/usr/bin/env bash
notify-send -u critical "$(xsel -o)" "$(wget -U "Mozilla/5.0" -qO - "https://translate.google.com/translate_a/single?client=t&sl=auto&tl=ru&hl=ru&dt=bd&dt=ex&dt=ld&dt=md&dt=qc&dt=rw&dt=rm&dt=ss&dt=t&dt=at&ie=UTF-8&oe=UTF-8&otf=2&srcrom=1&ssel=0&tsel=0&kc=3&tk=519592|450115&q=$(xsel -o | sed "s/[\"'<>]//g")&sl=auto&tl=ru" | sed 's/\[\[\[\"//' | cut -d \" -f 1)"
+1
на python код выглядит следующим образом:
# This script auto translate mark text on ubuntu in toolbar
# For work you need install with your env 'pip install googletrans'
import subprocess
from googletrans import Translator
def sendmessage():
translate = Translator()
text = subprocess.check_output(['xsel', '-o'])
rus_lang = translate.translate(text.decode('utf8'), dest='ru')
subprocess.Popen(['notify-send', text, rus_lang.text])
if __name__ == '__main__':
sendmessage()
0
Версия 2.0 определяет язык русский или английский. Потом делает перевод на противоположный
# This script auto translate mark text on ubuntu in toolbar
# For work you need with your env 'pip install googletrans'
#!/home/rus/Envs/translate/bin/python3
import subprocess
from googletrans import Translator
def sendmessage():
translate = Translator()
text = subprocess.check_output(['xsel', '-o'])
text = text.decode('utf-8')
lang = translate.detect(text).lang
dest_lang = 'enru'.replace(lang, '')
if dest_lang not in 'enru':
dest_lang = 'en'
rus_lang = translate.translate(text, dest=dest_lang)
subprocess.Popen(['notify-send', text, rus_lang.text])
if __name__ == '__main__':
sendmessage()
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Перевод выделенного текста с любого языка на русский