在Linux上看一些英文的翻译有点痛苦,但是又不希望再下载一个新的翻译软件。所以在找到一个google翻译的python库后便尝试将其整合到命令行中。
首先编写python函数
from gpytranslate import SyncTranslator
def TransFunc(lines):
t = SyncTranslator()
translation = t.translate(lines, targetlang="zh")
wd=translation["raw"]['sentences'][0]['trans']
return wd
写好后测试下,得到以下结果:
结果正常,继续后续步骤。
编辑shell脚本
参考这篇博文。
但是传递字符时出现问题,因此提出另一种解决方案。
python 直接传参
可以通过 sys
中的参数设置,读取参数。
其代码如下:
print("started!")
import sys
from gpytranslate import SyncTranslator
def TransFunc():
lines = str(sys.argv[1])
print("Python says "+lines)
t = SyncTranslator()
translation = t.translate(lines, targetlang="zh")
wd=translation["raw"]['sentences'][0]['trans']
return wd
print(TransFunc())
测试效果:
很棒!但是似乎也不够好用,我的目标是将其绑定在某个快捷键上,不用复制黏贴,所以还是再琢磨下。
读取剪切板内容
apt-get install xclip
安装xclip,测试读取的效果
Lines=`xclip -selection c -o`
棒!但是和脚本一起联合使用时,这样的分段文本导致脚本翻译只会转换第一句话,带来很大的不方便,如下图所示:
因此我们需要在传递参数的时候换行,测试了很多方法,终于在StackOverflow的一个帖子上找到了解决方法:
$Lines
# 存储换行符号的变量
echo "${Lines//[$'\t\r\n']}"
# 去除换行符,但是没有添加空格
echo "$Lines"|tr '\n' ' '
# 用空格替换
展示效果:
作为参数传递进去后,现在的shell脚本为:
Lines=`xclip -selection c -o`
echo $Lines
echo '\n'
python3 PythonScript.py "$Lines"|tr '\n' ' '
对应的python脚本为:
#print("started!")
import sys
from gpytranslate import SyncTranslator
def TransFunc():
lines = str(sys.argv[1])
#print("Python says "+lines)
t = SyncTranslator()
translation = t.translate(lines, targetlang="zh")
wd=''
for s in translation["raw"]['sentences']:
wd += s["trans"]
return wd
print('\n')
print(TransFunc())
测试效果:
分行的内容已经被转化为单行,已经完成了基本的步骤,接下来便可以绑定快捷键,快捷执行脚本了。
绑定快捷键
在键盘快捷键里设置即可
最后没能成功召唤控制台,所以就直接取个别名,也能解决问题。
alias tr='sh /Data/Rice_Bowl/Python/20220811Trans_Script/ShellScript.sh '
以上。