本文目录导读:

当然可以!使用脚本实现剪贴板翻译是一个非常实用的想法,下面我为你提供几种实现方案:
Python脚本(最灵活)
基本版(使用Google翻译API)
#!/usr/bin/env python3
import pyperclip
import time
from googletrans import Translator
def translate_clipboard():
translator = Translator()
# 获取当前剪贴板内容
text = pyperclip.paste()
if not text.strip():
print("剪贴板为空")
return
# 检测语言并翻译为中文
result = translator.translate(text, dest='zh-cn')
print(f"原文 ({result.src}): {text}")
print(f"翻译: {result.text}")
# 将翻译结果放回剪贴板
pyperclip.copy(result.text)
# 自动翻译模式(每3秒检查一次剪贴板变化)
def auto_translate():
last_text = pyperclip.paste()
while True:
time.sleep(3)
current_text = pyperclip.paste()
if current_text != last_text and current_text.strip():
last_text = current_text
translate_clipboard()
if __name__ == "__main__":
translate_clipboard() # 手动模式
# auto_translate() # 自动模式
增强版(支持多语言选择和更好的错误处理)
#!/usr/bin/env python3
import pyperclip
import time
import argparse
from googletrans import Translator
class ClipboardTranslator:
def __init__(self, dest_lang='zh-cn', auto_mode=False, interval=3):
self.translator = Translator()
self.dest_lang = dest_lang
self.auto_mode = auto_mode
self.interval = interval
self.last_text = pyperclip.paste()
def translate_text(self, text):
"""翻译文本并返回结果"""
try:
result = self.translator.translate(text, dest=self.dest_lang)
return result.text, result.src
except Exception as e:
return f"翻译错误: {str(e)}", None
def translate_current(self):
"""翻译当前剪贴板内容"""
text = pyperclip.paste()
if not text.strip():
print("剪贴板为空")
return
translated, src = self.translate_text(text)
print("=" * 50)
print(f"[原文语言: {src}] {text}")
print(f"[翻译结果] {translated}")
if self.dest_lang.startswith('zh') or translated != text:
pyperclip.copy(translated)
print("翻译结果已复制到剪贴板")
print("=" * 50)
def auto_run(self):
"""自动监控模式"""
print(f"自动翻译模式已启动,每{self.interval}秒检查剪贴板...")
print("按Ctrl+C退出")
try:
while True:
time.sleep(self.interval)
current_text = pyperclip.paste()
if current_text != self.last_text and current_text.strip():
self.last_text = current_text
print(f"检测到新内容: {current_text[:50]}...")
self.translate_current()
except KeyboardInterrupt:
print("\n已退出自动翻译模式")
def main():
parser = argparse.ArgumentParser(description='剪贴板翻译工具')
parser.add_argument('-l', '--lang', default='zh-cn', help='目标语言 (默认: zh-cn)')
parser.add_argument('-a', '--auto', action='store_true', help='自动监控模式')
parser.add_argument('-i', '--interval', type=int, default=3, help='自动检查间隔(秒)')
args = parser.parse_args()
translator = ClipboardTranslator(
dest_lang=args.lang,
auto_mode=args.auto,
interval=args.interval
)
if args.auto:
translator.auto_run()
else:
translator.translate_current()
if __name__ == "__main__":
main()
AppleScript(macOS原生)
-- 剪贴板翻译脚本 (macOS)
on run
set clipboardText to the clipboard
if clipboardText is "" then
display dialog "剪贴板为空"
return
end if
-- 使用Google翻译API
set encodedText to encodeText(clipboardText)
set apiURL to "https://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=zh-cn&dt=t&q=" & encodedText
try
set translationResult to do shell script "curl -s '" & apiURL & "'"
-- 处理JSON响应
set translatedText to parseTranslation(translationResult)
-- 复制翻译结果到剪贴板
set the clipboard to translatedText
display notification "翻译完成!" with title "剪贴板翻译"
on error errMsg
display dialog "翻译失败: " & errMsg
end try
end run
on encodeText(theText)
set theText to replaceChars(theText, " ", "%20")
return theText
end encodeText
on replaceChars(theText, searchStr, replaceStr)
set AppleScript's text item delimiters to searchStr
set theItems to every text item of theText
set AppleScript's text item delimiters to replaceStr
set theText to theItems as string
set AppleScript's text item delimiters to ""
return theText
end replaceChars
Windows PowerShell脚本
# 剪贴板翻译工具 (Windows)
param(
[string]$TargetLanguage = "zh-CN",
[switch]$AutoMode
)
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
function Translate-Text {
param([string]$Text)
$apiKey = "YOUR_API_KEY" # 替换为你的API密钥
$uri = "https://translation.googleapis.com/language/translate/v2?key=$apiKey"
$body = @{
q = $Text
target = "zh-CN"
source = "auto"
} | ConvertTo-Json
try {
$response = Invoke-RestMethod -Uri $uri -Method Post -Body $body -ContentType "application/json"
return $response.data.translations[0].translatedText
} catch {
return "翻译失败: $_"
}
}
function Get-ClipboardText {
$clipboard = [System.Windows.Forms.Clipboard]::GetText()
return $clipboard
}
function Set-ClipboardText {
param([string]$Text)
[System.Windows.Forms.Clipboard]::SetText($Text)
}
if ($AutoMode) {
$lastText = Get-ClipboardText
while ($true) {
Start-Sleep -Seconds 3
$currentText = Get-ClipboardText
if ($currentText -ne $lastText -and $currentText.Trim() -ne "") {
$lastText = $currentText
$translated = Translate-Text -Text $currentText
Write-Host "原文: $currentText"
Write-Host "翻译: $translated"
Set-ClipboardText $translated
}
}
} else {
$clipboardText = Get-ClipboardText
if ($clipboardText.Trim() -eq "") {
Write-Host "剪贴板为空"
} else {
$result = Translate-Text -Text $clipboardText
Write-Host "翻译结果: $result"
Set-ClipboardText $result
}
}
安装和使用
Python版
# 安装依赖 pip install pyperclip googletrans==4.0.0-rc1 # 运行 python clipboard_translate.py python clipboard_translate.py -a # 自动模式 python clipboard_translate.py -l en # 翻译成英文
快捷键设置建议
- macOS: 使用Alfred/Keyboard Maestro设置快捷键触发脚本
- Windows: 使用AutoHotkey或PowerToys设置快捷键
- Linux: 使用快捷键管理器绑定脚本
注意事项
- API限制: 免费API有调用限制,大量使用可能被限制
- 隐私考虑: 文本会发送到翻译服务,敏感信息请谨慎使用
- 语言支持: 支持100+种语言,可自定义目标语言
- 网络需求: 需要网络连接才能使用翻译功能
需要我详细说明某个特定平台的实现,或者帮你定制特定功能吗?