2

我找到了这个实用程序pytranslate,它使用 Google 的翻译 API 将多种语言相互翻译。它完全按照描述工作。

但是,我已经厌倦了选择一个我不理解的单词,然后在命令中单击它。命令格式如下:

pytranslate WORD

是否有程序/脚本能够检测我何时用鼠标选择一个单词或一系列单词,然后在终端窗口中用所选文本代替 WORD 执行上述命令?

例子:

所选文字:

Bonjour mondiale...

结果命令/结果:

pytranslate Bonjour mondiale
Detected source language: fr
Hello World
4

4 回答 4

4
#!/bin/bash
pytranslate "$(xsel -p)"

现在只需将其放入~/bin(确保它包含在您的 PATH 中),然后运行它。(您可能需要安装 xsel 包。)它将获取主选择缓冲区的当前内容并将其传递给 pytranslate。

如果您希望它作为一个按钮,请创建一个在终端中运行它的启动器,然后使用 bash 的读取命令执行“按 ENTER 继续”。

于 2009-12-07T01:43:12.640 回答
2

从 Roger Pate 出色的 one liner 中汲取灵感,我为 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
于 2009-12-07T02:42:31.293 回答
1

你能使用PyGTK包中的剪贴板支持来完成这项工作吗?它声称可以访问“主要”X剪贴板,它说这是您通常可以找到所选文本的地方。

于 2009-12-07T01:42:44.310 回答
0

注意:这个答案对没有使用 Windows 的提问者没有用。鉴于标题没有指定操作系统,我将把它留给可能来这里的 Windows 用户。


您可以使用 pywin32 包和 win32clipboard 模块轻松地自己制作一个。例如,参见这个问题

过去,我使用一个例程来完成此操作,该例程只是每隔几秒左右定期轮询剪贴板,每当它发现更改时,它就会抓取内容并对其进行处理。在您的情况下,使用 subprocess 包调用 pytranslate 与文本。

于 2009-12-07T01:36:02.623 回答