一个简单的划词翻译工具
看论文时经常要翻译,然而手动复制粘贴到翻译网站上又很麻烦,有些划词翻译工具比如有道的划词和取词,虽然不用按快捷键只选中文本就能翻译,但有时也会失灵什么的,于是就自己用python写了个调用百度翻译api的翻译脚本,翻译结果和百度翻译网站上的一模一样,感觉挺方便的。
效果
- 通过鼠标选择文本后,按下快捷键可以快速英汉互译,通过弹窗显示结果,其中汉译英需要满足第一个字是汉字
- 会自动复制翻译结果到剪切板中,按ctrl+v也可以显示文本
- 若不选择任何文本,则会翻译最近的剪切板中的文字,也就是说,连续按两下快捷键会先翻译成中文,再翻译成英文,或反过来。(这个操作简直是写论文避重的神器?)
需求
- 需求python3,安装库pyperclip和pyautogui
- 下载安装python3
- pip install pyperclip
- pip install pyautogui
- Windows中需要AutoHotkey软件
- 去百度翻译开放平台注册账号,将下面的代码块命名为translate.py并在18和20行中输入appid和secretkey
注意下面被{}括起来的表示文件的绝对位置,需要替换
Windows系统中
- 下载安装AutoHotkey
- 新建 translate.ahk \text{translate.ahk} translate.ahk, 填入下面代码,双击运行即可
#z:: Run %ComSpec% /c "python {translate.py}", , Hide
- #z代表快捷键为Win+z,#代表Win键,目前这个快捷键组合好像没什么冲突,按着也方便。若要改其他快捷键,可参考符号如下
符号 | 按键 |
---|---|
# | Win |
^ | Ctrl |
! | Alt |
+ | Shift |
- 另外,将
translate.ahk
\text{translate.ahk}
translate.ahk放入Windows的启动文件夹,可设置开机启动
- 启动文件夹一般是在
C:\Users\username\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
- 启动文件夹一般是在
Linux或Mac系统中
- 自定义快捷键,内容为 python {translate.py} \text{python \{translate.py\}} python {translate.py}
translate.py \text{translate.py} translate.py
import pyperclip
import pyautogui
import random
import json
from http import client
from hashlib import md5
from urllib.parse import quote
pyautogui.hotkey('ctrl', 'c')
sentence = pyperclip.paste()
sentence = sentence.replace('\n', ' ')
fromLang = 'auto'
if sentence[0] >= u'\u4e00' and sentence[0] <=u'\u9fa5':
toLang = 'en'
else:
toLang = 'zh'
# enter your appid
appid = ''
# enter your secretkey
secretKey = ''
myurl = '/api/trans/vip/translate'
salt = random.randint(32768, 65536)
sign = appid+sentence+str(salt)+secretKey
m1 = md5(sign.encode(encoding='utf-8'))
sign = m1.hexdigest()
myurl = myurl+'?appid='+appid+'&q='+ quote(sentence)+'&from='+fromLang+'&to='+toLang+'&salt='+str(salt)+'&sign='+sign
try:
httpClient = client.HTTPConnection('api.fanyi.baidu.com')
httpClient.request('GET', myurl)
response = httpClient.getresponse()
result = response.read()
result = json.loads(result)['trans_result'][0]['dst']
except:
result = 'Non-networked'
finally:
if httpClient:
httpClient.close()
try:
# pyperclip.copy('api.fanyi.baidu.com/' + myurl)
pyperclip.copy(result)
pyautogui.alert(result, title='Result')
except:
pass