При чтении англо-язычной литературы часто хочется подсмотреть перевод незнакомых слов. Для этого в браузерах есть плагины, например в
Chrome и в
Firefox. Руки тянутся делать и вне браузера. Один из способов - уподобится плагинам, испльзуя api одного из онлановых переводчиков, например от
Яндекс. Оный предоставляет xml и json форматы выхлопа. Используем json.
Скрипт читает английский стандартный ввод и пишет по-русский в стандартный вывод.
#!/usr/bin/env python
import httplib
import sys
from string import maketrans
import json
HOST = "translate.yandex.net"
RSRC = "/api/v1/tr.json/translate?lang=en-ru"
HTTP_OK = 200
TRANS_OK = 200
def outResult(uData):
result = uData.encode("utf8")
return result
def readFromStdIn():
result = ""
for line in sys.stdin:
result += "&text=" + line.strip()
return result
def prepareURL(arg):
text = arg.strip()
transTable = maketrans(" ?", "+.")
text = text.translate(transTable)
return text
def parseJSONResponseToList(dataString):
respDict = json.loads(dataString)
transCode = respDict['code']
if transCode == TRANS_OK:
lineList = respDict['text']
else:
lineList = None
return lineList
def getResponse(host, rsrc):
h = httplib.HTTP(host)
h.putrequest("GET", rsrc)
h.putheader("Host", host)
h.putheader("User-agetnt", "python httplib on linux 3")
h.endheaders()
retCode, retMsg, headers = h.getreply()
if retCode == HTTP_OK:
f = h.getfile()
line = f.read()
f.close()
return line
else:
print retCode, headers, retMsg
#prepare translate
respLine = getResponse(HOST, RSRC + prepareURL(readFromStdIn()))
transLines = parseJSONResponseToList(respLine)
translation = u''
for line in transLines:
translation += line + ' '
try:
outLine = outResult(translation)
except:
pass
print outLine
Надо бы добавить определение
языка, передачу через аргументы командной строки, обработку ошибок...
Чтобы переводить выделенный текст используем xclip и
bash :
#!/bin/bash
xclip -o | /home/maa/soft/shell/yandex_translate_en-ru.py | while read MESSAGE; do notify-send Перевод "`xclip -o` : $MESSAGE"; done
И, наконец, вешаем на shell скрипт хоткей.