我找到了这个实用程序pytranslate,它使用Google的翻译API将各种语言相互翻译。它完全按照描述工作。
然而,我已经厌倦了选择一个我不理解的单词,然后在命令中间点击它。命令格式如下:
pytranslate WORD
是否有程序/脚本能够检测我何时用鼠标选择单词或一系列单词,然后在终端窗口中用WORD代替所选文本执行上述命令?
示例:
选定文字:
Bonjour mondiale...
结果命令/结果:
pytranslate Bonjour mondiale
Detected source language: fr
Hello World
答案 0 :(得分:4)
#!/bin/bash
pytranslate "$(xsel -p)"
现在把它放在~/bin
中(确保它包含在你的PATH中),并运行它。 (您可能需要安装xsel包。)它将获取主选择缓冲区的当前内容并将其传递给pytranslate。
如果你想把它作为一个按钮,创建一个在终端中运行它的启动器,并使用bash的read命令来执行“按ENTER继续”。
答案 1 :(得分:2)
从Roger Pate的精彩内容中汲取灵感,我为pytranslate创建了一个简单的循环脚本。这是暂时的 - 因为我还没有实现错误捕获 - 等待新的编辑。
#!/bin/bash
# Primary Clipboard poller using xsel (middle click) and pytranslate
# Checks for changes every 1 second
# If change has occured, a command is executed (pytranslate here)
########## Information ##########
# It now stores definitions in a text file - saves bandwith and reduces hits on google (caseless)
# Works for Romance languagse
#TODO
# Character based langauges
# Catch errors
if [ ! -e "pytranslatecache" ]; then
touch pytranslatecache
fi
while [ 1 ]
do
OLDENTRY="$(xsel -p)"
sleep 1
NEWENTRY="$(xsel -p)"
if [ "$NEWENTRY" != "$OLDENTRY" ] ; then
if [ "$(grep -F -o -i "$NEWENTRY" pytranslatecache)" = "$NEWENTRY" ] ; then
echo "From Cache:"
echo "$(grep -i "$NEWENTRY" pytranslatecache)"
else
DEFINITION=""$(pytranslate -s fr "$(xsel -p)")""
echo "$NEWENTRY"":"$DEFINITION
echo "$NEWENTRY"":"$DEFINITION >> pytranslatecache
fi
fi
# Catch Errors - Commands
if [ $? != 0 ]; then
{
echo "Failed to translate string."
} fi
done
答案 2 :(得分:1)
您是否可以使用PyGTK包中的剪贴板支持来完成这项工作?它声称可以访问“主”X剪贴板,它通常是您通常可以找到所选文本的位置。
答案 3 :(得分:0)
注意:这个答案对于没有使用Windows的提问者毫无用处。鉴于标题没有指定操作系统,我会留给那些可能会这样的Windows用户。
您可以使用pywin32软件包和win32clipboard模块轻松自己动手。例如,请参阅this question。
我在过去做过这个过程,只是每隔几秒左右定期轮询剪贴板,每当发现变化时,它就会抓住内容并用它做一些事情。在您的情况下,使用子进程包调用pytranslate文本。