LINUX.ORG.RU
решено ФорумTalks

Переводилка для вашего ПекА

 , , , ,


7

3

Часто забываю всякие забугорные слова, написал скриптик прототип, который берёт текст из буфера обмена шлёт на сервера гугла и показывает ответ всплывающим окошечком, удобно тем что переводить можно всё подряд из любого мета и не нужно теледвижений, можно навесить на горячую клавишу. Написал для себя, мож кому будет полезно.

Обновлено.

Зависимости apt install lua xclip xsel xdotool aosd_cat translate-shell

Вопщем таксь.
Порой, нужно не просто выделить текст где угодно и увидеть его по перевод по горячей клавише,
но и получить его перевод в виде текста. К счастью в x11 есть аж три буфера обмена.
Поэтому добавил опцию copy_translated=true/false.

Суть проста:

  • вешаете скрипт, например на F7
  • выделяете произвольный текст без его копирования через контекстное меню(как и было)
  • нажимаете F7 и
  • всплывает текст перевода (как и было)
  • нажимаете среднюю кнопку мышки и в любом поле ввода вставляется оригинальный текст
  • нажимаете правую кнопку мышки и через контекстное меню делаете вставить и вставляется переведённый вариант
  • повторное нажатие F7 ещё раз покажет перевод, без повторного выделения
#! /bin/env lua
local poptrans =
{
    -- select language from lang to lang
    lang_from = "auto", --auto,en,fr,de or other
    lang_to   = "ru",
    -- copy translated text to clipboard
    -- if you select text (no use context menu textcopy)
    --   - middle mouse button paste translated text
    --   - right mouse button context menu paste original text
    --   - script used 2 levels X11 clipboard buffest of 3 levels :)
    copy_translated = true,
    -- how more seconds show you translated text
    show_timer = 3,
    -- popup translated text under mouse position
    follow_mouse = true,
    -- if follow_moise is false, set translated
    -- text position static coords
    popup_pose_x = 0,
    popup_pose_y = 0,
    -- max width message in screen, zero is auto
    popup_width  = 0,
    -- get text from system clipboard
    app_clipboard = "xclip -o 2> /dev/null",
    -- set text to system clipboard
    app_set_clipb = "xsel -b -i ",
    -- get mouse systemd coords
    app_mousepose = "xdotool getmouselocation 2> /dev/null",
    -- show text popup with translated text
    app_popup_msg = "aosd_cat -x %d -y %d -B white -R white -t 0 -p 0 -u %d -w %d"
}

function poptrans:run()
    local translated = '';
    self.previos_text = '';
    -- read clipboard
    local exec = io.popen(self.app_clipboard);
    local text = exec:read('*all');exec:close();
    -- get cursor position
    exec = io.popen(self.app_mousepose);
    if self.follow_mouse then
        self.popup_pose_x,self.popup_pose_y = exec:read("*all"):match("x:(%d+) y:(%d+)");
        self.popup_pose_x = self.popup_pose_x+3; exec:close();
    end
    -- do not translate previos text or empty or translated text
    if text ~= previos_text and text ~= '' and text ~= translated then
      local from = ''
      if self.lang_from ~= "auto" then
        from = self.lang_from;
      end
      exec = io.popen('trans   '..from..':'..self.lang_to.." -b '"..text.."'");
      translated = exec:read("*all"); exec:close();
      if self.copy_translated then
         exec = io.popen(self.app_set_clipb,'w')
         exec:write(translated:sub(1,#translated-1));
         exec:flush();
         exec:close();
      end
      previos_text = text;
      exec = io.popen(
      self.app_popup_msg:format(
      self.popup_pose_x,self.popup_pose_y,self.show_timer*1000,self.popup_width),"w");
      exec:write(translated);exec:close();
    end
end

poptrans:run()

Не используйте версию из истории правок!. Там опасный баг с кавычками, (спасибо @maxcom исправить дал)
Единственное что там полезно это пример как делать перевод через гугл API по токену.
Но раз появилась возможность правки то ::)

- ИСПОЛЬЗОВАТЬ НА СВОЙ СТРАХ И РИСК, Я НЕ НЕСУ НИКАКОЙ ОТВЕТСТВЕННОСТИ
- ВСЁ ПРЕДОСТАВЛЯЕТСЯ КАК ЕСТЬ, ЛЮБЫЕ СОМНЕНИЯ ДОЛЖНЫ ВЕСТИ
- К ОТКАЗУ ОТ ИСПОЛЬЗОВАНИЯ
★★★★★

Последнее исправление: LINUX-ORG-RU (всего исправлений: 9)

режиме демона оно весь скопированный текст пошлёт в гугл транслейт.

how about no

phoenix ★★★★
()
Ответ на: комментарий от phoenix

daemon_mode = false и шли переводить только по хоткею. Делов то.

Постоянный режим это например если какую,книжку или статью читаешь и попадаются то тут то там непонятные слова, выделил текст, перевод увидел и дальше читаешь, никуда не тыкая, не переключаясь. Закончил читать, грохнул скрипт.

Мне просто идея понравилась, раньше расширение было для браузера которое попапом показывало перевод по выделению, но тут удобнее ибо не только для браузера, а для всего.

LINUX-ORG-RU ★★★★★
() автор топика
Последнее исправление: LINUX-ORG-RU (всего исправлений: 3)
Ответ на: комментарий от xDShot

Хз, наверное не сложно будет перенести, я хотел для cinnamon сделать с иконкой в трее, но у меня боли пузика от js API из интросекций гобжектов я просто там ничего не понимаю. Но если перенести можно будет сделать красивее и попап в аккуратном GTK квадратике без рамок и всё такое. Может кто запилит.

LINUX-ORG-RU ★★★★★
() автор топика
Ответ на: комментарий от praseodim

Если есть можно прикрутить, только я таких не знаю, по сути можно ещё добавить кеширование переводов, но мне и так норм.

LINUX-ORG-RU ★★★★★
() автор топика

у translate-а есть RPC API, хаки через http могут очень быстро вычислить и зобанить по айпи.

насчёт локальных переводчиков, вроде stardict шевелится, не знаю как там со словарями. Тыщу лет назад я прикручивал к нему словари от Лингво

phoenix ★★★★
()

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

Языки «не знаю/не помню» (в школе учил de), :) использую уже давненько translate-shell и примитивный bash-скрипт, типа такого, повешенный на хоткей.

krasnh ★★★
()
Последнее исправление: krasnh (всего исправлений: 1)
Ответ на: комментарий от krasnh

Ну вот, я лисапед изобрёл. Ну и ладно =). А так прикольно надо как запаску прикрутить translate-shell в качестве переводчика если токен текущий отвалится. Спасибо.

LINUX-ORG-RU ★★★★★
() автор топика
Ответ на: комментарий от praseodim

Интересно сейчас остались локальные переводилки, вроде бывшего когда-то Stylus и тп?

Под оффтопик, скорее всего, да. Т.к. онлайн переводилки на 100% никогда не заменят живого человека и словари.

Под онтопик, если так можно сказать, использую словарь ABBYY Lingvo для Android, честно купленный с кучей словарей. Также часто пользуюсь словарями, встроенными в электронные книги (например, в Kindle толковые словари английского и испанского).

Кстати, надо сказать, что качество испанских словарей в ABBYY Lingvo мне кажется очень невысоким. Любой выход за пределы небольшого круга бытовой лексики, и слово либо вообще не найти, либо оно переведено совершенно невнятно, либо даже неправильно.

Но альтернативы всё равно нет.

emorozov
()
Ответ на: комментарий от LINUX-ORG-RU

Но все равно, похвальное владение языком lua на таком уровне, чтобы написать >100 строчек кода. )

Я когда скачиваю готовые lua для mpv, бывает заглядываю внутрь и просто восхищаюсь этими волшебниками и творцами. :)

krasnh ★★★
()

Ааа, он меня посчитал... Требую соответствующих выплат, я своего согласия не давал :)

anc ★★★★★
()
Ответ на: комментарий от krasnh

Переделал под твою переводилку в шапке, так даже лучше. Спасибо.

LINUX-ORG-RU ★★★★★
() автор топика
Ответ на: комментарий от praseodim

Интересно сейчас остались локальные переводилки, вроде бывшего когда-то Stylus и тп?

У меня есть такое, «Англо-русский словарь с иллюстрациями», релиз 1964го года, пока переводит нормально =D.

GREAT-DNG ★★★
()
Ответ на: комментарий от GREAT-DNG

Ты ещё небось и грамматику почитываешь, отсталый человек.

papin-aziat ★★★★★
()
Ответ на: комментарий от praseodim

Голдендикт вроде мог буфер переводить во всплывашках, ну и вообще хорошая штука, плюс веб-сервисы подключаются как словари.

massimus ★★★
()
Ответ на: комментарий от Original_1

Текст из манов и типа того наверное можно простым словарём переводить. Я сщас 450000+ переводов английских слов себе дамплю, получу словарь с перекрёстным переводом и прикручу его как переводчик, оч интересно что за белиберда будет получаться =)

Хотя всего 57000 слов за 5 часов… Ещё почти двое суток будет дампить, ох. А белиберда будет

...
[58071]  circumaviate => облетать 
Did you mean: circumnavigation
[58072]  circumaviation => кругосветное плавание 
Did you mean: circumnavigator
[58073]  circumaviator => кругосветчик 
[58074]  circumaxial => окружной 
[58075]  circumaxile => окружной 
[58076]  circumaxillary => подмышечный 
[58077]  circumbasal => циркумбазальный 
[58078]  circumbendibus => круговой автобус 
Did you mean: circumbendibus
[58079]  circumbendibuses => кругосветные автобусы 
[58080]  circumboreal => околобореальный 
[58081]  circumbuccal => околощечный 
[58082]  circumbulbar => околобульбарный 
[58083]  circumcallosal => околомозолистый 
[58084]  circumcellion => обрезание 
[58085]  circumcenter => центр окружности 
Did you mean: circumcentre
[58086]  circumcentral => околоцентральный 
[58087]  circumcinct => окружающий 
[58088]  circumcincture => окружность 
[58089]  circumcircle => описанный круг 
Did you mean: circumcision
[58090]  circumcise => обрезать 
[58091]  circumcised => обрезанный 
Did you mean: circumcision
[58092]  circumciser => обрезающий 
Did you mean: circumcised
[58093]  circumcises => обрезание 
[58094]  circumcising => обрезание 
[58095]  circumcision => обрезание 
[58096]  circumcisions => обрезание 
Showing translation for:  (use -no-auto to disable autocorrect)
[58097]  circumcission => обрезание 
[58098]  circumclude => окружить 
[58099]  circumclusion => замкнутость 
[58100]  circumcolumnar => околоколонный 
[58101]  circumcone => огибающий конус 
[58102]  circumconic => околоконусный 
[58103]  circumcorneal => околороговичный 
[58104]  circumcrescence => полулуние 
...
LINUX-ORG-RU ★★★★★
() автор топика
Ответ на: комментарий от Original_1

GoldenDict, но это словарь

Человек пишет, что «слова забываю». Я тоже, поэтому StarDict/QStarDict с откуда-то дернутыми базами. Для Q и просто StarDict их надо положить в /usr/share/stardict/dic вручную.

А для фраз, когда лень читать, или хз какой немецкий там, есть translate.google.com . Открыть вкладку и не париться вручную скопипастить.

bugs-bunny
()
Последнее исправление: bugs-bunny (всего исправлений: 1)
Ответ на: комментарий от praseodim

Интересно сейчас остались локальные переводилки, вроде бывшего когда-то Stylus и тп?

Stylus давным-давно сменил имя на Promt. По крайней мере, так утверждает сайт Promt-а.

https://www.promt.ru/translation_software/corporate/professional/

Цену на большинство дистрибутивов скрывают, но англо←→русский переводчик стоит от 2900 р. в год или 5900 р. без лимита времени. 5-язычный оффлайн у посредников 84 000 р. Есть 7-язычный оффлайн, есть 40-язычный (100 пар языков), для которых я цену не нашёл. Последний — линуксовый сервер, обслуживающий локальную сеть, с возможностью обращаться за переводом на сервера Промта, но также с возможностью гарантии конфиденциальности, что я понял как работу оффлайн.

question4 ★★★★★
()
Последнее исправление: question4 (всего исправлений: 1)
Ответ на: комментарий от massimus

Голдендикт вроде мог буфер переводить во всплывашках

Верно. Или открывать своё окно с переводом буфера по хоткею.

плюс веб-сервисы подключаются как словари.

Свободные (Википедию, Викисловарь и др.) можно скачать и использовать оффлайн. Правда, выкладываемые обновляются раз-два в год.

question4 ★★★★★
()
Последнее исправление: question4 (всего исправлений: 1)
Ответ на: комментарий от bugs-bunny

StarDict/QStarDict с откуда-то дернутыми базами.

GoldenDict с базами Lingvo с работы. На pypi нашёлся конвертер их в формат DSL, который понятен большинству программ-словарей.

https://github.com/sv99/lsdreader
https://pypi.org/project/lingvoreader/

question4 ★★★★★
()
Последнее исправление: question4 (всего исправлений: 1)
Ответ на: комментарий от phoenix

stardict шевелится, не знаю как там со словарями. Тыщу лет назад я прикручивал к нему словари от Лингво

Сейчас это стало совсем легко. Формат отреверсили
https://github.com/sv99/lsdreader
https://pypi.org/project/lingvoreader/

Вот только Лингво 8 лет не выпускал новые словари :(

question4 ★★★★★
()
Ответ на: комментарий от question4

А Урбан ещё подключается, не сломали? С переводами игорь и сериалов прям незаменимая штука была с этим их слэнгом.

massimus ★★★
()
Ответ на: комментарий от question4

Формат отреверсили

Вот это был вообще праздник.

massimus ★★★
()
Ответ на: комментарий от massimus

А Урбан ещё подключается, не сломали? С переводами игорь и сериалов прям незаменимая штука была с этим их слэнгом.

Urban Dictionary? Не знаю. Предпочитаю Викисловарь и Гугл. Туда пишут все, кому ни лень, много повторов, и вандализм имеется. Викисловарь пополняется из него же, но там статьи шлифуются несколькими людьми.

Проверил. В китайском форке GoldenDict работает. Но если статьи под одинаковым заголовком на одну страницу не влезают (больше 7 штук), покажет только первую, остальные — в браузере.

question4 ★★★★★
()
Последнее исправление: question4 (всего исправлений: 1)
Ответ на: комментарий от no-such-file

Они есть в торрентах, уже конвертированные.

Когда понадобились, живых раздач с конвертированными не нашёл. Только раздачи дистрибутивов Lingvo с неконвертированными LSD.

question4 ★★★★★
()
8 декабря 2023 г.
Ответ на: удаленный комментарий

проста, как глиста

Гельминты намного сложнее амёб! :-D

dataman ★★★★
()
Ответ на: комментарий от dataman

Их некоторые вообще считают вершиной эволюции =) А девушки некоторые их в себе специально заводят для похудения 🤮

Амёба так то крутая тоже. Она как терминатор из жидкого металла, только не металлическая.

LINUX-ORG-RU ★★★★★
() автор топика
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)