背景
博主在读研究生,需要看大量英文文献, 无奈英语太渣,硬着头皮看容易走神,使用翻译软件或者谷歌翻译还会遇到一个严重的问题:
那就是在很多论文上复制内容,其中每一行都会带一个回车符,翻译时还得一个一个删,还得频繁地 Ctrl-C->鼠标->Ctrl->V 操作(可想而知我有多懒).
突然间想到大学毕业论文降重时写过一个出口转内销的Python脚本(中文->外文->中文),稍加改变即可实现所需功能(太特么聪明了)
使用姿势如下图:
右边复制,左边即可显示结果
代码
全部代码如下
# coding=utf-8
import requests
import pyperclip
import time
import sys
import os
url = "https://translate.googleapis.com/translate_a/single?client=gtx&sl={}&tl={}&dt=t&q={}&ie=UTF-8&oe=UTF-8"
try:
la = sys.argv[1]
except:
print("*******************************************")
print("剪切板翻译小程序")
print("Author: ColdCurlyFu")
print("Blog: https://blog.csdn.net/weixin_43480922/article/details/101625868")
print("*******************************************\n\n")
print("英语:en")
print("中文(繁体):zh-TW")
print("法语:fr")
print("俄语:ru")
print("日语:ja")
print("越南语:vi")
print("波兰语:pl")
print("德语:de")
print("韩语:ko")
print("其他自己查:http://board.locoy.com/?post=94")
print("*******************************************")
la = input("输入需要转换的语言(例如:en):")
print("*******************************************")
f_name = ''
try:
f_name = sys.argv[2]
with open(f_name+'.txt', 'a+', encoding='utf-8')as f:
pass
except:
if input("是否写进文档?")==('y'or'yes'or'Y'or'YES'or''):
f_name = input("输入文件名(默认后加.txt):")
with open(f_name+'.txt', 'a+', encoding='utf-8')as f:
pass
path_dirs = os.listdir()
if 'vBook.md' not in path_dirs:
with open('vBook.md', 'a+',encoding='utf-8') as f:
f.write(' Vacb | 释义 |Time\n')
f.write(' :-:|:-:||:-:\n')
if 'history.md' not in path_dirs:
with open('history.md', 'a+',encoding='utf-8') as f:
pass
old_text = ""
text = ""
translation = ""
while True:
text = pyperclip.paste()
if old_text != text and translation != text:
# print(list(text))
iput = ''
iput = text.replace('\r\n', ' ')
im = ''
im = iput.replace('\n',' ')
old_text = text
full_url = url.format( la, "zh-CN", im)
try:
r = requests.get(full_url)
except:
print("一定是你错了!")
translation = ""
if r.json()[0] != None:
for item in r.json()[0]:
if item[0] != None:
try:
translation+=item[0].replace('\r', '')
except:
pass
if len(translation) >= 2:
if len(im) <= 20:
with open('vBook.md', 'a+',encoding='utf-8') as f:
#<font Size=5 face="Arial Rounded MT" color=green>section</font>|<font Size=5 face="华文行楷" color=black>不分</font>|<font Size=4 face="Arial Rounded MT" color=gray>2019/11/10</font>
f.write('<font Size=5 face="Arial Rounded MT" color=green>' + im.lower()+'</font>|<font Size=5 face="华文行楷" color=black>' + translation + '</font>|<font Size=4 face="Arial Rounded MT" color=gray>' + time.strftime('%Y/%m/%d') + '</font>\n')
with open('vBook.txt', 'a+',) as f:
f.write( '['+time.strftime('%Y-%m-%d') + '] '+ im.lower()+ ': ' + translation + '\n')
with open('history.md', 'a+',encoding='utf-8') as f:
f.write('<div style="text-align:justify;word-break:break-all;"><font face="华文隶书" Size=5 color=green>    ' + im+'</font></div>\n\n')
f.write('<div style="text-align:justify;word-break:break-all;"><font Size=5 face="华文行楷" color=black>    ' + translation + '</font></div>\n\n')
f.write('<div align=right><font Size=4 face="Arial Rounded MT" color=gray>' + time.strftime('%Y/%m/%d %H:%M') + '</font></div>\n\n')
print(translation)
pyperclip.copy(translation)
if f_name:
with open(f_name+'.txt', 'a+', encoding='utf-8')as f:
f.write(translation + '\n')
print("*******************************************")
print("已复制到剪切板,直接粘贴即可(当前语言:"+la+")")
print("*******************************************")
time.sleep(0.3)
ps: 代码会删除复制文本中所有的’\r’和’\n’,请按句子或者按段落翻译,不要整篇翻译
10.12修改:
增加单词本功能,把复制的长度小于20写到文件中,输出文件为Markdown格式
预览如下:
ps:这是在vscode上的预览
插件名:Markdown Preview Enhanced
10.24修改:
增加写入文件功能,增加了输入与上次翻译结果的判断,翻译结果可以直接写入剪切板,复制完直接粘贴即可,不用看命令行。
执行
python ./gtl.py [语言(例如en)] [文件名(后面自动加.txt)]
例如:
python ./gtl.py en mytxt
然后就可以不用管它了^_^
10.24修改2:
由于我翻译的过于频繁,返回429了。。。。。
这次更改了异常处理(就是出错了瞎打印)
一个小时后能用了
所以…
不要太快。。。。。。
emmmmmmmmmm。。。。。。。
12.2修改:
功能增加,输出到history.md中,有英汉对照,还有时间戳,字体可自行调整和安装