写一个轻量化的Google翻译脚本

发布于:2023-01-09 ⋅ 阅读:(569) ⋅ 点赞:(0)

在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 '  

以上。


网站公告

今日签到

点亮在社区的每一天
去签到