рдкрд╛рдпрдерди + GTK3 рдкрд░ рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП Yandex.Translator

рдЕрднрд┐рд╡рд╛рджрди habrazhitel!


рдХрд╛рдлреА рд╕рдордп рдкрд╣рд▓реЗ рдПрдХ рдмрдВрдж рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╣реБрднрд╛рд╖реА рдСрдирд▓рд╛рдЗрди рдЕрдиреБрд╡рд╛рджрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред


рдирд╣реАрдВ, рдореИрдВ "рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрдард┐рди" рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╢рдмреНрджрдХреЛрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд┐рд░рд╕реНрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдореБрдЭреЗ рдПрдХ рдмрдбрд╝рд╛ рдкрд╛рда рдкрдврд╝рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдФрд░ рдореИрдВ рд╕рднреА рд╢рдмреНрджреЛрдВ рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирддрд╛, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕рдВрджрд░реНрдн рдЦреЛ рдЬрд╛рддрд╛ рд╣реИред


рдЫрд╡рд┐


рд╢реБрд░реБрдЖрдд рдореЗрдВ рдПрдХ рдЕрдиреБрд╡рд╛рдж-рдЦреЛрд▓ рдерд╛ ...


рдЕрдиреБрд╡рд╛рдж-рдЦреЛрд▓ рдЪреАрдЬрд╝ рдХрд╛рдлреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдк рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдХрд╣рддреЗ рд╣реИрдВ, Vi / vim рдореЗрдВ ред рдЕрдЧрд▓реЗ рдХрдВрд╕реЛрд▓ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдЕрдиреБрд╡рд╛рдж рдХрд░реЗрдВред


рдЪрд╛рдмрд┐рдпрд╛рдБ рд╕рд░рд▓ рдФрд░ рдпрд╛рдж рд░рдЦрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИрдВред


$ trans -b -e yandex -t en " ." Simple keys.  $ echo -e "\n .\n"|trans -b -e yandex -t en With redirection. 

рд▓реЗрдХрд┐рди рдпрд╣, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рдерд╛ред рдореБрдЭреЗ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдЪрд╛рд╣рд┐рдП рдереЗред


SublimeText рдФрд░ Zeal рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдХреБрдЫ рд╣рдж рддрдХ рдирдВрдЧреЗ рдХрдВрд╕реЛрд▓ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред


рдЫрд╡рд┐


рд╣рдореНрдо ... рд╕реЛрдЪрд╛ рдерд╛, рд╕реЛрдЪрд╛ рдерд╛, рдФрд░ рдЕрдиреБрд╡рд╛рджрдХ рдХреЛ рдПрдХ рдЧрд░реНрдо рдХреБрдВрдЬреА рдХреЛ рдЬрдХрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рдЪреБрдирд╛рд╡ gxmessage рдкрд░ рдЧрд┐рд░ рдЧрдпрд╛ред рдЬрд╝реЗрдирд┐рдЯреА рдиреЗ рдореБрдЭреЗ рд╕реВрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдореБрдЭреЗ рдпрд╛рдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВред
рдХреЛрдб рд▓рд┐рдЦрд╛ рдерд╛:


 #!/bin/bash # Name script trans.sh TEXT=$(xclip -selection primary -o) TRANS=$(trans -e yandex -hl en -tl ru -b "$TEXT") if [ "$TRANS" ]; then gxmessage -geometry 1000x800 -bg "#aaaaaa" -title "Translate" -wrap -center -font "Menlo Regular 24" "$TRANS" else gxmessage -geometry 1000x800 -bg "#aaaaaa" -title "Translate" -wrap -center -font "Menlo Regular 24" "   " fi 

рдФрд░ Ctrl + 1 рдХреЛ рд╕реМрдВрдкрд╛ред IceWm рдореЗрдВ, рдпрд╣ рдЖрд╕рд╛рди рд╣реИред $ HOME / .icewm / рдХреБрдВрдЬрд┐рдпрд╛рдБ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ


 key "Ctrl+1" $HOME/progs/trans.sh 

рдЗрд╕рдиреЗ рдореБрдЭреЗ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓ рдХрд┐рдпрд╛ред рдЕрдВрдЧреНрд░реЗрдЬреА рд╕реЗ "рдирд┐рдпрдВрддреНрд░рдг + 1" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдВрдЧреНрд░реЗрдЬреА рд╕реЗ "рдирд┐рдпрдВрддреНрд░рдг + 2"ред рдареАрдХ рд╣реИ ...


рдЫрд╡рд┐


рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЕрдиреБрд╡рд╛рдж-рдЦреЛрд▓ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рд▓рдЧрд╛ред


рдЫрд╡рд┐


рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдХреНрдпрд╛ рд╣реБрдЖ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдЭреЗ рдкрд░реЗрд╢рд╛рди рдХрд░рддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдЗрд╕реЗ рддрдп рдХрд┐рдпрд╛, рдореИрдВрдиреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЕрдЬрдЧрд░ рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ред


Google рдХреА рдПрдХ рдЫреЛрдЯреА рд╕реА рдЦреЛрдЬ рдиреЗ рдореБрдЭреЗ Gand рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ Yandex.API , Python, рдФрд░ GTK + 3 рддрдХ рдкрд╣реБрдВрдЪрд╛ рджрд┐рдпрд╛ ред


рдХреНрдпреЛрдВ рдЬреА , рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЖрдорддреМрд░ рдкрд░ PyQt5 рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИ? рдпрд╣ рдореЗрд░реА рдХрд╛рд░ рдкрд░ рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдорд╢реАрди рдирдИ рдирд╣реАрдВ рд╣реИ, рдореЗрдореЛрд░реА, рднреА (рдЖрдзреБрдирд┐рдХ рдорд╛рдирдХреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░) рдЗрддрдиреА рдЧрд░реНрдо рдирд╣реАрдВ рд╣реИред


рдЫрд╡рд┐


рдЕрдЬрдЧрд░ GTK + 3 рдореЙрдбреНрдпреВрд▓ рдореЗрд░реЗ рд▓рд┐рдП рдирдпрд╛ рдерд╛ред рдореИрдВрдиреЗ рдкреВрд░реА рд╢рд╛рдо рдПрдХ рдмрд╛рд░ , рджреЛ рдмрд╛рд░ рдФрд░ рддреАрди рдмрд╛рд░ рд╕рд╛рдЗрдЯреЛрдВ рдкрд░ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреЛ рдЫрд╛рдВрдЯрдХрд░ рдмрд┐рддрд╛рдИ ред


рддреЛ рдХреЛрдб рдХрд╛ рдЬрдиреНрдо рд╣реБрдЖ:
 #!/usr/bin/env python3.6 # -*- coding: utf-8 -*- import sys import requests import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk from gi.repository import Gdk from gi.repository import Pango import warnings warnings.filterwarnings("ignore") import os CURRDIR = os.path.dirname(os.path.abspath(__file__)) ICON = os.path.join(CURRDIR, 'yandex-48.xpm') headers = { 'User-Agent': ('Mozilla/5.0 (Windows NT 6.0; rv:14.0) Gecko/20100101 ' 'Firefox/14.0.1'), 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language': 'ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3', 'Accept-Encoding': 'gzip, deflate', 'Connection': 'keep-alive', 'DNT': '1' } URLDETECT = "https://translate.yandex.net/api/v1.5/tr.json/detect" URLTRANS = "https://translate.yandex.net/api/v1.5/tr.json/translate" KEY = "you-API-key" def clip(): clipboard = Gtk.Clipboard.get(Gdk.SELECTION_PRIMARY) clip = clipboard.wait_for_text() return clip def detect(): params = {"key": KEY, "text": clip(), "lang": 'ru'} respdetect = requests.get(URLDETECT, params=params, headers=headers).json() if 'lang' in respdetect.keys(): respdetect = respdetect else: respdetect = {'code': 200, 'lang': 'en'} langtetect = respdetect["lang"] if langtetect != 'ru': langout = langtetect + '-ru' else: langout = 'ru-en' return langout def translate(): params = {"key": KEY, "text": clip(), "lang": detect()} response = requests.get(URLTRANS, params=params, headers=headers).json() if 'text' in response.keys(): response = response else: response = {'code': 200, 'lang': 'en-ru', 'text': ['the buffer is empty'] } output = ''.join(response["text"]) return output class TextViewWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title=f"Yandex Translator {detect()}") self.set_default_size(1000, 350) self.set_position(Gtk.WindowPosition.CENTER_ALWAYS) self.grid = Gtk.Grid() self.add(self.grid) self.create_textview() self.create_toolbar() self.key_Esc = Gdk.keyval_from_name("Escape") self.connect("key-press-event", self._key) def create_toolbar(self): toolbar = Gtk.Toolbar() self.grid.attach(toolbar, 1, 1, 1, 1) new_button = Gtk.ToolButton.new_from_stock(Gtk.STOCK_CLOSE) new_button.set_is_important(True) toolbar.insert(new_button, 0) new_button.connect("clicked", self.on_button_clicked, self.tag_bold) new_button.show() def on_button_clicked(self, widget, tag): Gtk.main_quit() def create_textview(self): scrolledwindow = Gtk.ScrolledWindow() scrolledwindow.set_hexpand(True) scrolledwindow.set_vexpand(True) self.grid.attach(scrolledwindow, 0, 0, 2, 1) self.textview = Gtk.TextView() self.textbuffer = self.textview.get_buffer() self.textbuffer.set_text(f"{translate()}") scrolledwindow.add(self.textview) self.textview.set_wrap_mode(Gtk.WrapMode.WORD) self.tag_bold = self.textbuffer.create_tag("bold", weight=Pango.Weight.BOLD) self.textview.modify_font(Pango.FontDescription('Menlo Regular 24')) def _key(self, widg, event): if event.keyval == self.key_Esc: Gtk.main_quit() win = TextViewWindow() win.connect("destroy", Gtk.main_quit) win.set_icon_from_file(ICON) win.show_all() Gtk.main() 

рдирддреАрдЬрддрди, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЧрд░реНрдо рдХреБрдВрдЬреА рдкрд░ рдПрдХ рдСрдЯреЛ-рдЕрдиреБрд╡рд╛рджрдХ рд╣реИред


рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рджред


рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬреАрдердм рдкрд░ рд╣реИред


рдкреБрдирд╢реНрдЪ: рдореБрдЭреЗ рдХреЛрдб рдХреА рдЖрд▓реЛрдЪрдирд╛ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

Source: https://habr.com/ru/post/hi472516/


All Articles