Crow Translate :开源桌面划词翻译工具

每次遇到外文单词都要打开翻译网页、复制粘贴、切回原界面,这一套流程下来思路被打断不说,来回切窗口还费手。Crow Translate是一款纯开源免费的桌面翻译工具,基于C++和Qt框架构建,将划词即译 作为核心交互模式,覆盖100+种语言,支持调用Google、Bing、Yandex、LibreTranslate等主流翻译引擎,同时内置离线OCR引擎实现屏幕任意区域的图文识别翻译。本文将从技术架构、全局键盘钩子机制、OCR识别管线、多引擎翻译接口设计、内存占用优化等维度进行全面拆解。

一、引言

在日常工作与学习中,阅读外文资料、查阅技术文档、处理多语言交流是许多开发者和科研工作者的常态。传统的翻译流程往往需要:选中文本 → 复制 → 打开浏览器 → 粘贴到翻译网站 → 等待页面加载 → 查看翻译结果 → 切回原窗口继续工作。这个看似简单的流程,在频繁翻译的场景下不仅打断了工作流,更累积了大量无意义的切换操作时间。

Crow Translate的出现彻底改变了这一体验。它是一款基于Qt和C++构建的开源桌面翻译软件,在GitHub上已获得超过4.5K Star。与许多基于Electron框架的同类应用不同,Crow Translate直接使用原生C++/Qt技术栈,启动速度快、内存占用低,长期挂载后台运行也不会对系统性能产生可感知的影响。

二、项目概况与技术栈

2.1 项目背景

Crow Translate由开发者Jonas M. (GitHub ID: Shatur)创建并维护,项目仓库托管于GitHub(https://github.com/Shatur95/Crow-Translate)。截至2026年,项目仍在持续活跃更新中,支持Windows、Linux和macOS三大桌面平台。

Crow Translate这个名字的由来颇具趣味------"Crow"在英语中意为"乌鸦",而乌鸦以聪明、机敏著称。开发者希望这款软件能像乌鸦一样,灵动轻盈地帮助用户获取跨语言信息。

2.2 完整技术栈

技术维度 选型 说明
主编程语言 C++17 高性能编译型语言,内存管理精细
UI框架 Qt 6 (Widgets) 跨平台GUI框架,提供原生级的窗口管理和控件渲染
构建系统 CMake 3.16+ 跨平台构建工具,支持多种编译器和平台
翻译引擎 Google / Bing / Yandex / LibreTranslate API 多引擎可选,支持在线+自托管多种翻译后端
OCR识别 Tesseract OCR + Leptonica 开源OCR引擎组合,支持100+种语言的文字识别
文本转语音 Qt Multimedia / QTextToSpeech 支持翻译结果朗读和原文本语音输入
键盘钩子 平台原生API (X11/WinAPI/Cocoa) 全局热键注册与划词动作捕获
包管理 vcpkg / Conan C++依赖管理工具,自动处理第三方库编译和链接
CI/CD GitHub Actions 自动化构建、测试和发布流程
开源协议 GPL-3.0 强制衍生作品开源,保障项目长期开放性
安装包大小 ~30-50MB(因平台而异) 原生编译,无需额外运行时环境

三、核心技术机制:划词翻译的实现原理

Crow Translate最核心的功能也是其命名来源------"划词翻译"。用户在任意应用程序(浏览器、文档编辑器、PDF阅读器等)中选中文字,按下快捷键即可立即看到翻译结果,无需复制、无需切换窗口。

3.1 全局键盘钩子与热键注册

实现这一功能的第一步是全局热键监听 。Crow Translate需要在后台持续监听用户设定的快捷键组合(默认为Ctrl+Alt+E),即使应用本身处于后台运行状态,也需要能够捕获这一键盘事件。

在技术实现上,这一功能依赖操作系统级别的全局键盘钩子(Global Keyboard Hook)

  • Windows平台 :使用Win32 API的RegisterHotKey函数注册全局热键。当系统检测到用户按下指定组合键时,无论当前焦点窗口是哪一个应用,系统都会向Crow Translate发送WM_HOTKEY消息,触发后续的翻译流程。

  • Linux/X11平台 :使用X11的XGrabKey函数,在X11服务器层面注册全局热键。Qt的QAbstractNativeEventFilter被用来过滤和处理底层的X11事件,实现跨进程的键盘监听。

  • macOS平台 :使用Carbon API的RegisterEventHotKey或Cocoa的NSEvent全局事件监听机制,配合Qt的macOS平台插件实现热键注册。

需要注意的是,出于安全考虑,操作系统通常要求使用AltCtrlShift等修饰键的组合作为全局热键,且全局热键的注册是进程独占的------如果两个应用注册了相同的热键组合,后注册的应用将无法成功注册。

3.2 选中文案的捕获流程

当用户按下热键后,Crow Translate需要获取用户当前在其他应用中选中的文本内容。这一步的技术实现依赖系统剪贴板与模拟复制

  1. 保存当前剪贴板内容 :由于后续操作会修改剪贴板,程序首先调用QClipboard::text()读取当前剪贴板中的原始内容并暂存到内存中。

  2. 模拟"复制"快捷键 :程序通过QProcess或系统API向操作系统发送Ctrl+C(Windows/Linux)或Cmd+C(macOS)的虚拟按键事件。由于用户刚刚选中了文本,当前焦点窗口接收到复制指令后,会将选中的文本写入系统剪贴板。

  3. 读取选中的文本 :稍作等待(通常50-200ms,取决于目标应用的响应速度),确保剪贴板内容已更新,然后调用QClipboard::text()读取用户选中的文本。

  4. 恢复剪贴板:将步骤1中保存的原始剪贴板内容重新写回剪贴板,避免干扰用户之前的复制操作。这一步骤是可选的(可在设置中关闭),但对于频繁使用剪贴板的用户来说,这是一个贴心的细节设计。

3.3 翻译流程与结果展示

获取到用户选中的文本后,翻译流程进入核心处理阶段:

  1. 语言自动检测:通过API调用或内置的语言检测算法,自动判断源语言的语种。用户可以在设置中选择"自动检测源语言",也可以指定固定的源语言和目标语言。

  2. API调用:根据用户的设置,程序构建HTTP请求并调用选定的翻译引擎API。支持Google Translate、Bing Translator、Yandex.Translate以及开源的LibreTranslate等多种后端。

  3. 响应解析:接收API返回的JSON/XML格式的响应数据,解析出翻译文本。

  4. 弹窗展示 :将翻译结果显示在一个无边框悬浮弹窗中。这个弹窗设计为置顶显示、点击外部自动关闭、支持鼠标拖拽移动位置,不抢夺键盘焦点,不影响用户在原窗口中的操作。

整个流程从用户按下快捷键到看到翻译结果,通常在1-3秒内完成(取决于网络速度和翻译引擎的响应时间)。

四、OCR屏幕翻译:从图片中提取并翻译文字

对于遇到"图片里的英文、软件界面上的英文、论文截图"这类无法直接选中文本的场景,Crow Translate提供了OCR屏幕翻译功能,通过结合图像捕获与光学字符识别技术,实现"框选屏幕任意区域,自动识别并翻译"。

4.1 屏幕区域捕获

当用户按下OCR翻译快捷键(默认为Ctrl+Alt+O)后,Crow Translate会进入区域选择模式。具体实现分为两步:

  1. 全屏截图与遮罩 :程序调用Qt的QScreen::grabWindow(0)获取整个桌面的当前快照,然后将这张全屏截图显示为一个全屏的半透明遮罩窗口。

  2. 区域框选:用户在这个遮罩窗口上用鼠标拖拽出一个矩形区域。程序记录下矩形区域的屏幕坐标和尺寸,从全屏截图中裁剪出对应的子图像,作为OCR引擎的输入。

4.2 OCR文字识别

Crow Translate使用Tesseract OCR + Leptonica作为OCR引擎的组合。Tesseract由Google维护,是目前最成熟的开源OCR引擎之一,支持超过100种语言的文字识别,包括中文、日文、韩文等非拉丁字符集。

在技术实现上,Crow Translate通过Tesseract的C++ API(tesseract::TessBaseAPI)调用OCR功能:

  1. 图像预处理:使用Leptonica库对截取的图像进行预处理,包括灰度化、二值化、降噪、倾斜校正等操作,以提高OCR识别准确率。

  2. 语言数据加载 :根据用户设置的语言偏好,加载对应的Tesseract语言数据文件(如eng.traineddatachi_sim.traineddata等)

  3. 文字识别 :调用GetUTF8Text()方法进行文字识别,返回识别结果字符串

  4. 后处理:去除多余的空白符和换行符,对识别结果进行简单的文本清理

4.3 翻译与结果展示

OCR识别完成后,识别出的文本会自动送入翻译流程,与划词翻译使用相同的翻译引擎和弹窗展示机制,确保一致的交互体验。

五、多翻译引擎支持的技术实现

Crow Translate支持多种翻译后端,用户可以在设置中自由选择和切换。这一设计不仅提供了功能上的灵活性,也体现了开源项目不依赖单一商业API的抗风险能力。

翻译引擎 是否需要API Key 免费额度 语言覆盖 特点
Google Translate 有每日限制 100+ 翻译质量最高,但国内访问不稳定
Bing Translator 需要 每月200万字符 100+ 微软Azure服务,企业级稳定性
Yandex.Translate 需要 每日1000万字符 90+ 俄语系翻译质量优异
LibreTranslate 否(自托管) 无限(自托管) 30+ 完全开源可自部署,零成本零限制

从代码架构上看,Crow Translate采用了策略模式 来管理多引擎的翻译接口。每个翻译引擎都被封装为一个独立的翻译器类,继承自抽象的QOnlineTranslator基类。当用户切换引擎时,程序只需创建对应的翻译器实例并替换当前的翻译器引用,其余代码无需任何修改。

这种设计使得添加新的翻译引擎非常简单------只需实现QOnlineTranslator定义的标准接口即可,无需改动翻译弹窗、OCR识别、划词捕获等其他模块的代码。

六、附加功能:文本朗读与语音输入

除了翻译能力外,Crow Translate还内置了两个实用但常被忽视的辅助功能:

文本朗读(Text-to-Speech) :翻译完成后,用户可以点击播放按钮,让程序用目标语言的语音朗读翻译结果。这一功能依赖于Qt的QTextToSpeech模块或操作系统的原生TTS引擎,不需要额外的网络请求。

语音输入(Speech-to-Text) :对于不想打字、或是想练习发音的用户,可以直接朗读文本内容,程序通过语音识别引擎将语音转换为文字,然后送入翻译流程。该功能使用Qt的QSpeechRecognition接口实现。

七、性能优势:内存占用与启动速度

与许多基于Electron框架构建的同类工具相比,Crow Translate在性能方面展现出显著优势。Electron应用本质上是捆绑了一个完整的Chromium浏览器内核,即使是一个简单的翻译弹窗工具,Electron版本的内存占用通常也在150-300MB之间。而Crow Translate基于原生C++/Qt技术栈构建,无需加载浏览器引擎,内存占用极低:

状态 内存占用 说明
后台闲置 ~20MB 仅主窗口最小化到托盘,等待热键触发
主动翻译 ~40MB 翻译弹窗显示中,包含Qt渲染缓冲
OCR识别 ~80MB(峰值) 加载Tesseract语言模型文件,识别完成后自动释放

轻量化的设计使得Crow Translate即使长期挂载在后台运行,也不会对系统整体性能产生可感知的影响,这对于需要同时运行多个开发工具的程序员来说尤为友好。

八、与同类翻译工具的横向对比

对比维度 Crow Translate Bob (macOS) Pot (跨平台) DeepL Desktop
技术栈 C++ / Qt 6 Objective-C / Swift Electron / Vue Electron / Web
跨平台 ✅ Win/Linux/macOS ❌ 仅macOS ✅ Win/macOS/Linux ✅ Win/macOS
划词翻译
OCR识别 ✅ 内置 ✅ 内置 ✅ 内置
翻译引擎 Google/Bing/Yandex/LibreTranslate Google/Bing/DeepL等 Google/Bing/DeepL等 仅DeepL
开源情况 ✅ GPL-3.0 ❌ 闭源 ✅ GPL-3.0 ❌ 闭源
内存占用(闲置) ~20MB ~50MB ~180MB ~250MB
价格 完全免费 付费 完全免费 免费+Pro付费

九、总结

Crow Translate以轻量、高效、开源的姿态,将"鼠标一划,翻译即来"的理念变成了可触摸的现实。它解决了翻译流程中最核心的摩擦点------频繁的复制粘贴和窗口切换,将翻译操作简化为一次按键触发。而其内置的OCR屏幕翻译能力,进一步扩展了使用场景,让图片中的外文也不再成为阅读障碍。

从技术视角看,Crow Translate体现了轻量级原生桌面应用在特定功能场景下的显著优势。与基于Electron的同类产品相比,它在资源占用和启动速度上有着数量级的差异。而C++/Qt技术栈的选择,也使得它能够在三大桌面操作系统上提供一致而流畅的原生体验。

如果你每天都有翻译需求,受够了来回切换窗口、复制粘贴的低效操作,Crow Translate很可能会成为你系统托盘里长期驻扎的那一款工具。

🎁 配套资源

为了方便各位开发者快速上手,笔者已将Crow Translate的官方下载指引整理打包:

复制代码
https://pan.baidu.com/s/1dfnjX0JFKslaHhRuBAsikQ?pwd=8888
https://pan.quark.cn/s/b808583f2aec
相关推荐
数据法师1 小时前
Alger Music Player 技术深度解析:基于 Electron + Vue 3 的开源网易云第三方客户端
vue.js·electron·开源
王璐WL1 小时前
【C++】经典易错题(2)
c++
我不是懒洋洋1 小时前
手写一个异步日志库:从printf到高性能无锁日志
java·c语言·开发语言·c++·visual studio
hetao17338372 小时前
2026-05-28~06-02 hetao1733837 的刷题记录
c++·算法
wunaiqiezixin2 小时前
如何在C++中实现一个单例模式?
c++·单例模式
Soari2 小时前
GitHub 开源项目解析:revfactory/harness —— Claude Code 的多智能体团队架构工厂
架构·开源·多智能体协作·claude code·软件工程自动化
一个爱编程的人2 小时前
图的相关概念
c++·算法·图论
尤老师FPGA2 小时前
QT代码自适应窗口
开发语言·qt
智碳未来科技有限公司2 小时前
工业能源数字化的开源实践:智碳 EMS 技术架构与落地指南
开源·能源·能源管理系统·开源能源管理系统·能碳管理系统·绿色工厂申报