基于AutoHotkey的便捷翻译器SmartTranslator
用AHK写的智能翻译器,支持查词和翻译
1.API接口
- 词典接口:海词、词霸、有道。
- 翻译接口:谷歌、百度、有道。
2.功能简述
- 支持中英文自动识别,无需设置源语言和目标语言
- 支持句子和单词自动识别,不需要其他切换操作
- 未完待续···
3.使用方法
- 第一步:选择需要查询的单词或者需要翻译的句子
- 第二步:长按右键(或者按下快捷键window + c )直接查词或者翻译
- 第三步:翻译完成后,在鼠标附近弹出窗口显示翻译结果,鼠标置于文字上,弹窗永不消失,离开弹窗一秒,窗口自动关闭
- 第四步:在翻译结果文字上按下左键,会替换当前被翻译的内容;按下右键,则将结果复制到剪贴板
4.操作演示
5.源代码
;@Ahk2Exe-SetMainIcon Icon\SmartTranslator.ico
;@Ahk2Exe-AddResource Icon\SmartTranslator.ico, 160
;@Ahk2Exe-SetProductName SmartTranslator
;不显示托盘图标
;#NoTrayIcon
;跳过对话框, 自动替换旧实例
#SingleInstance force
;设置工作目录
SetWorkingDir %A_ScriptDir%
;不检查空变量是否为环境变量
#NoEnv
;启用或禁用可能产生错误的特定状况时的警告, 例如书写错误或缺少全局声明
;#Warn
;让脚本保持后台运行
#Persistent
;防止用户的击键与发送的击键穿插在一起
SendMode Input
#include WinHttpRequests.ahk
#include TranslateAPI.ahk
#Include <Basic>
Global TranslateResults := "Welcome to the SmartTranslator"
ShowWizard()
ConfingInit()
TrayInit()
return
#c::
ClipboardAnalyze()
return
$RButton::
KeyWait, RButton, T0.25
if (ErrorLevel = 1)
ClipboardAnalyze()
else
Send, {
RButton}
Return
ClipboardAnalyze()
{
Global
clipboard := ""
send ^{
c}
ClipWait, 1
Clipboard := StrReplace(Clipboard, "`r`n", " ")
if RegExMatch(clipboard, "[一-鬼]") ;查找汉字.
{
;中文模式
dictOut := StrReplace(Clipboard, A_Tab)
dictOut := StrReplace(dictOut, A_Space)
if (strlen(dictOut) >3 || RegExMatch(dictOut, "[^一-鬼]") != 0 )
{
;翻译模式
TranslateResults := Select_Dict_Trans("Trans",dictOut)
}
Else
{
;词典模式
TranslateResults := Select_Dict_Trans("Dict",dictOut)
if(strlen(Results) = 0)
TranslateResults := Select_Dict_Trans("Trans",dictOut)
}
}
else
{
;英文模式
dictOut := StrReplace(Clipboard, A_Tab)
pos := RegExMatch(dictOut, "\s")
pos += 1
;查找是否含有字母、空格之外的符号
if (RegExMatch(dictOut, "[^a-zA-Z\s]", var) || RegExMatch(dictOut, "\s",, pos))
{
;翻译模式
TranslateResults := Select_Dict_Trans("Trans",dictOut)
}
Else
{
;词典模式
TranslateResults := Select_Dict_Trans("Dict",dictOut)
if(strlen(TranslateResults)=0)
TranslateResults := Select_Dict_Trans("Trans",dictOut)
}
}
GuiTip(TranslateResults)
Clipboard := ""
return
}
;@Ahk2Exe-Bin ,,"UTF-8"
GuiTip(message := "Welcome to use the SmartTranslator!")
{
Global varText := message
If (StrLen(message)>=300)
{
W_0 := "w950"
}
Else If (StrLen(message)>=100)
{
W_0 := "w700"
} Else If (StrLen(message)>=55)
{
W_0 := "w500"
} Else
W_0 := ""
Gui, GuiTip:Destroy
Gui, GuiTip:+ToolWindow +HwndGuiTip_A -Caption +AlwaysOnTop border -DPIScale
Gui, GuiTip:Color, cDDDDDD
Gui, GuiTip:Font, s13 c2D2D2D Q5, 微软雅黑
Gui, GuiTip:Margin, 5, 5
Gui, GuiTip:Add, Text, X0 %W_0% gGuiTipText, %message%
Gui, GuiTip:Font, s10 c333333 Q5, 微软雅黑
CoordMode, Mouse
MouseGetPos, Mu_XX, Mu_YY
Gui_XX := Mu_XX+10, Gui_YY := Mu_YY+10
Gui, GuiTip:Show, x%Gui_XX% y%Gui_YY%,GuiTip
Gui, GuiTip:Show, x%Gui_XX% y%Gui_YY%,GuiTip
SetTimer, GUISet, -1000
}
return
GuiTipText:
ToolTip, 原文已被替换
SetTimer, Move_TT, -500
Gui, GuiTip:Destroy
Clipboard := varText
Send ^{
v}
Sleep, 100
Clipboard := ""
return
GuiTipGuiContextMenu:
ToolTip, 译文已被复制
SetTimer, Move_TT, -500
Gui, GuiTip:Destroy
Clipboard := varText
return
GuiSet:
MouseGetPos, mx,my
WinGetPos, wx, wy, wd, wh,GuiTip
if((mx < wd) && (my < wh))
{
SetTimer, GUISet, -500
}
Else
{
Gui, GuiTip:Destroy
}
Return
Move_TT()
{
ToolTip
Return
}
Select_Dict_Trans(mode:= "Trans",str := "hello")
{
if(mode = "Dict")
{
DictChoice := Ini.Read("BasicSetting","DictChoice")
if(DictChoice = 1)
TheResults := Dict.Dict(str)
if(DictChoice = 2)
TheResults := Dict.Youdao(str)
if(DictChoice = 3)
TheResults := Dict.Ciba(str)
}
if(mode = "Trans")
{
TransChoice := Ini.Read("BasicSetting","TransChoice")
if(TransChoice = 1)
TheResults := Trans.Google(str)
if(TransChoice = 2)
TheResults := Trans.Youdao(str)
if(TransChoice = 3)
TheResults := Trans.Baidu(str)
}
return TheResults
}
ConfingInit()
{
if !(FileExist("config.ini"))
{
Ini.Write("BasicSetting","StartUp",False)
Ini.Write("BasicSetting","DictChoice",3)
Ini.Write("BasicSetting","TransChoice",3)
}
}
TrayInit()
{
Menu, Tray, NoStandard
Menu, Tray, Add, 设置, TraySetting
Menu, Tray, Default, 设置
Menu, Tray, Add, 关于, TrayAbout
Menu, Tray, Add, 退出, TrayExit
IniRead, OnStart, config.ini, Setting, StartUp ,0"
if(OnStart = 1)
Menu, Tray, Check, 开机自启
return
}
TraySetting()
{
Global
DictChoice := Ini.Read("BasicSetting","DictChoice")
TransChoice := Ini.Read("BasicSetting","TransChoice")
StartUpCheck := Ini.Read("BasicSetting","StartUp")
Gui SettingGui:New
Gui SettingGui:-MaximizeBox -MinimizeBox
GUi SettingGui:Font, s10, Verdana
Gui SettingGui:Add, GroupBox, w375 h100, 基本设置
GUi SettingGui:Add, Text, X20 Y35, 词典引擎
Gui SettingGui:Add, DropDownList, X80 Y35 W70 vDictChoice AltSubmit Choose%DictChoice%, 海词|词霸|有道
GUi SettingGui:Add, Text,X20 Y70, 翻译引擎
Gui SettingGui:Add, DropDownList, X80 Y70 W70 vTransChoice AltSubmit Choose%TransChoice%, 百度|谷歌|有道
Gui SettingGui:Add, Checkbox, X200 Y35 vStartUpBtn Checked%StartUpCheck%, 开机自启动
Gui SettingGui:Add, GroupBox, X12 Y110 w375 h150, 高级设置
GUi SettingGui:Add, Button, X80 Y268 W60 gSettingGuiOK, 确定
GUi SettingGui:Add, Button, X160 Y268 W60 gSettingGuiCancel, 取消
GUi SettingGui:Add, Button, X240 Y268 W60 gSettingGuiApply, 应用
Gui SettingGui:Show, W400 H300 Center, 设置
return
SettingGuiOK:
SettingGuiApply:
GUi SettingGui:Submit
Ini.Write("BasicSetting","StartUp"