
Pot 跨平台划词翻译与 OCR 软件一个快捷键打通「即选即译、截图识别、对外集成」的完整实战指南【免费下载链接】pot-desktop一个跨平台的划词翻译和OCR软件 | A cross-platform software for text translation and recognize.项目地址: https://gitcode.com/pot-app/pot-desktopPot 是一款基于 Tauri Rust React 构建的跨平台划词翻译与 OCR 软件支持 Windows、macOS 与 Linux含 Wayland 环境。它解决的核心问题很直接选中文本按一个快捷键弹出译文框选屏幕区域做文字识别或截图翻译把剪贴板、截图、快捷键串成连续阅读与速记工作流。本文面向看得懂命令行、想装好用好并希望看懂关键实现的开发者与进阶用户读完你可以完成安装、配置多翻译服务、读懂核心调用链并通过 HTTP 接口把 Pot 接入自己的桌面流程。三分钟跑起来装完就能用的第一次体验三个平台的推荐安装路径都优先走包管理器装完即可用。Windows 用 wingetwinget install Pylogmon.potmacOS 用 Homebrewbrew tap pot-app/homebrew-tap brew install --cask potLinux 上Debian/Ubuntu 从 Release 下载.deb包安装依赖版本偏高跑不起来时换universal包它基于glibc2.28与openssl-1.1Arch/Manjaro 直接yay -S pot-translation首次启动会打开设置窗口先选一个可用的翻译服务如 Google、Bing 等免密钥服务为「划词翻译」绑定一个全局快捷键如CtrlShiftT。之后值得立刻试的三个操作在任意程序里选中一段英文按快捷键——译文窗口跟随鼠标弹出按「输入翻译」快捷键在窗口里打字回车无需先选中文本按「截图 OCR」快捷键框选屏幕任意区域识别结果直接展示并可再翻译成目标语言。能力图谱按使用场景对照源码模块Pot 把服务能力归为四类——翻译、识别、语音、收藏前端枚举在src/utils/service_instance.tsServiceTypetranslate/recognize/tts/collectionRust 侧的内置白名单在src-tauri/src/config.rs的check_service_available中builtin_translate_list等四个列表启动时会把已失效的服务从配置里剔除。按场景分组如下场景能力源码模块仓库相对路径划词 / 输入翻译21 个内置翻译服务并行出译多语言界面src/services/translate/index.jsx、src/i18n/locales截图 OCR / 截图翻译系统 OCR离线、Tesseract.js离线、百度/腾讯/火山/讯飞 OCR、Simple LaTeX、二维码识别等src/services/recognize/index.jsx、src-tauri/src/system_ocr.rs语音合成Lingva TTSsrc/services/tts/index.jsx导出到单词本Anki、欧路词典Eudicsrc/services/collection/anki、src/services/collection/eudic剪贴板监听「复制即译」500ms 轮询触发src-tauri/src/clipboard.rs外部调用 / 快捷键本地 HTTP 服务、全局快捷键注册src-tauri/src/server.rs、src-tauri/src/hotkey.rs插件扩展.potext插件覆盖四类能力src-tauri/src/cmd.rs、src/utils/invoke_plugin.js拆开来看一次划词翻译的完整调用链从「选中文字 → 弹出译文」这个最典型的操作切入整条链路是全局快捷键 → Rust 窗口管理 → 事件推送 → 前端渲染多路译文。入口全局快捷键。快捷键注册在src-tauri/src/hotkey.rs的register_shortcut应用启动时src-tauri/src/main.rs的 setup 里调用register_shortcut(all)把selection_translate、input_translate、ocr_recognize、ocr_translate四个 handler 绑定到 Tauri 的GlobalShortcutManager键位存于配置前端可通过register_shortcut_by_frontend命令随时改绑。取词与入状态。划词的底层实现在src-tauri/src/window.rs的selection_translate先用selection::get_text()读取系统选中文本写入全局状态StringWrappermain.rs中管理的MutexString随后translate_window()建窗并window.emit(new_text, text)把文本推给前端。前端拿到new_text事件后翻译窗口从useConfig(translate_service_list, ...)读出服务列表对每个服务实例并行发起请求多路译文在src/window/Translate/的SourceArea/TargetArea组件中分栏渲染。窗口跟随鼠标的细节。translate_window()会读取鼠标物理坐标与 DPI按translate_window_position配置决定定位mouse时窗口贴在鼠标旁并做越界回拉其他值则用translate_window_position_x/y的固定坐标。输入翻译走input_translate它向状态写入特殊标记[INPUT_TRANSLATE]并发同名事件前端据此切换为输入模式若定位模式为mouse窗口还会window.center()居中。OCR 的截图分支差异。按平台拆开看平台截图方式实现位置macOS直接调系统screencapture -i -r存到pot_screenshot_cut.pngwindow.rs的ocr_recognize#[cfg(target_os macos)]分支Windows / Linux全屏截图窗口src-tauri/src/screenshot.rs的screenshot命令抓屏存pot_screenshot.png前端src/window/Screenshot/index.jsx展示图片供用户拖框松手时调cut_imagesrc-tauri/src/cmd.rs裁剪出pot_screenshot_cut.png并emit(success)Rust 侧监听后打开识别窗口screenshot.rs、cmd.rs的cut_image、window.rs的screenshot_window系统 OCR 的三端实现是另一组对照src-tauri/src/system_ocr.rs三个#[cfg(target_os)]分支Windows 走Windows.Media.OCR的OcrEnginemacOS 运行打包进资源的 Vision 框架二进制Linux 直接执行tesseract命令缺语言包时会给出tesseract-ocr-{lang}的安装提示。LLM 类翻译服务的通用写法。OpenAI 类服务OpenAI、ChatGLM、Gemini Pro、Ollama 共用实现在src/services/translate/openai/index.jsx的translate函数自动补全/v1/chat/completions路径用promptList模板替换$text、$from、$to、$detect占位符构造提示词stream开启时按data:分片解析 SSE 流并逐段回填译文关闭时取choices[0].message.content。剪贴板监听的实现很朴素。src-tauri/src/clipboard.rs的start_clipboard_monitor是一个 500ms 轮询循环监听开关打开且剪贴板文本变化时直接调用text_translate复用整条翻译链路——这也解释了为什么「复制即译」无需任何前端配合。扩展与集成.potext 插件、HTTP 接口与第三方联动插件的运行机制。插件文件扩展名为.potext安装入口在设置页「添加外部插件」。校验与解压逻辑在src-tauri/src/cmd.rs的install_plugin文件名去掉.potext后必须以plugin开头压缩包内必须含info.json声明plugin_type与main.js通过后解压到配置目录的plugins/plugin_type/plugin_name/。运行侧对应到src/utils/invoke_plugin.js前端eval插件的main.js并注入一组工具对象——tauriFetch、http、readBinaryFile、readTextFile、Database、CryptoJS、cacheDir、pluginDir、osType以及关键的run它调用 Rust 侧run_binary命令以插件目录为工作目录执行插件自带的可执行二进制返回{stdout, stderr, status}。这就是一套「JS 脚本 原生二进制」的混合插件模型离线 OCR 插件如 Rapid、Paddle正是靠它跑本地识别引擎。本地 HTTP 接口。应用启动时src-tauri/src/server.rs的start_server在127.0.0.1上起一个tiny_http服务默认端口60828可在设置里改server_port改完需重启应用。http_handle的路由分发接口说明POST /或POST /translate请求体为待翻译文本直接翻译GET /config打开设置窗口GET /selection_translate翻译当前选中的文本GET /input_translate打开输入翻译窗口GET /ocr_recognize//ocr_translate先内置截图再识别/翻译GET /ocr_recognize?screenshotfalse跳过截图直接识别约定路径的图片screenshotfalse时handle_ocr_recognize直接调recognize_window()、handle_ocr_translate直接调image_translate()两者都读取pot_screenshot_cut.png请求处理完统一返回ok。一条最简调用curl 127.0.0.1:60828/selection_translate不依赖内置截图的工作流。用自己习惯的截图工具Flameshot、Scrot 等截完图把 PNG 存到系统缓存目录下的com.pot-app.desktop/pot_screenshot_cut.png再请求screenshotfalse接口即可。Linux 用 Flameshot 的完整示例rm ~/.cache/com.pot-app.desktop/pot_screenshot_cut.png \ flameshot gui -s -p ~/.cache/com.pot-app.desktop/pot_screenshot_cut.png \ curl 127.0.0.1:60828/ocr_recognize?screenshotfalse已有第三方集成Windows 上的 SnipDo装pot.pbar扩展选区旁出现 pot 图标macOS 上的 PopClip装pot.popclipextz扩展并在设置中启用Linux 上的 Starry仍在开发需手动编译。平台落地与兼容装完之后会踩的坑Windows启动后无界面、点托盘没反应→ 原因是 WebView2 被卸载或禁用企业系统甚至装不上 → 手动安装/恢复 WebView2装不上的话用 Release 里的*_fix_webview2_runtime-setup.exe修复版再不行尝试以 Windows 7 兼容模式启动。Windows 插件报错「The specified module could not be found」是缺 C 运行库安装 Microsoft Visual C Redistributable 即可「Not a valid Win32 application」是插件与当前系统/架构不匹配去插件仓库下对应架构版本。macOS提示开发者无法验证→ 原因是系统对未签名应用的隔离 → 点 Cancel 后在「设置 → 隐私与安全性」里「仍要打开」Apple Silicon 上提示文件损坏时执行sudo xattr -d com.apple.quarantine /Applications/pot.appmacOS每次打开都弹权限提示、或划词翻译失效→ 原因是辅助功能授权残留 → 在「设置 → 隐私与安全性 → 辅助功能」中移除 pot 后重新添加。注意Arch/Manjaro 上较新的 Webkit2Gtk2.42.0在 Nvidia 闭源驱动未完整实现 DMABUF 的情况下会导致启动失败或崩溃需降级 Webkit2Gtk或在/etc/environment添加WEBKIT_DISABLE_DMABUF_RENDERER1。注意Flatpak 版Flathub 上的com.pot_app.pot缺失托盘图标习惯用托盘的用户建议用 deb/AUR 包。Wayland 下的三件事各发行版支持程度不一需配置解决快捷键不可用Tauri 对 Wayland 的全局快捷键支持不完善应用内快捷键方案失效 → 改为系统级快捷键 curl调用 HTTP 接口上一节的/selection_translate等路由即为此准备。内置截图不可用纯 Wayland 环境如 Hyprland→ 用外部截图工具走screenshotfalse工作流Hyprland 配置示例bind ALT, X, exec, grim -g $(slurp) ~/.cache/com.pot-app.desktop/pot_screenshot_cut.png curl 127.0.0.1:60828/ocr_recognize?screenshotfalse bind ALT, C, exec, grim -g $(slurp) ~/.cache/com.pot-app.desktop/pot_screenshot_cut.png curl 127.0.0.1:60828/ocr_translate?screenshotfalse翻译窗口不跟随鼠标Wayland 下 Pot 取不到精确鼠标坐标translate_window()的跟随逻辑不生效 → 用窗口管理器规则实现Hyprland 示例windowrulev2 float, class:(pot), title:(Translator|OCR|PopClip|Screenshot Translate) windowrulev2 move cursor 0 0, class:(pot), title:(Translator|PopClip|Screenshot Translate)此外仓库里还有一份 patches/hyprland.patch它注释掉src/window/Translate/index.jsx中对tauri://move事件的监听避免移动窗口时触发误关闭逻辑自编译的 Wayland 用户可以参考。从源码到发布物环境要求与完整编译链路依赖最低版本Node.js 18.0.0pnpm 8.5.0Rust 1.80.0前端栈见 package.jsonTauri CLI^1.6.3、React 18、NextUI、TailwindCSS、i18next、tesseract.js桌面端为 Rustsrc-tauri/。克隆仓库git clone https://gitcode.com/pot-app/pot-desktop安装依赖cd pot-desktop pnpm installLinux 需补系统库sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev libayatana-appindicator3-dev librsvg2-dev patchelf libxdo-dev libxcb1 libxrandr2 libdbus-1-3开发模式可选pnpm tauri dev构建安装包pnpm tauri build。多平台差异集中在src-tauri/tauri.conf.json之外的三个平台配置tauri.windows.conf.jsonNSIS 安装包、内嵌 WebView2 bootstrapper、tauri.macos.conf.json打包resources/*与 macOS 图标、tauri.linux.conf.json托盘图标设置。收尾三条实用路径与延伸阅读日常使用装好后绑定快捷键划词翻译 剪贴板监听覆盖绝大多数阅读场景特殊平台Wayland 等走「系统快捷键 curlHTTP 接口 外部截图工具 screenshotfalse」的组合绕开 Tauri 在 Wayland 上的短板深度集成或二次开发基于src/utils/invoke_plugin.js揭示的插件模型开发.potext插件或直接把127.0.0.1:60828的 REST 接口接入自己的软件与自动化脚本。延伸参考仓库内的 README_EN.md 是功能与安装口径最全的文档源码上建议按src-tauri/src/window.rs→src-tauri/src/server.rs→src/window/Translate/index.jsx的顺序读正好对应上文那条调用链。【免费下载链接】pot-desktop一个跨平台的划词翻译和OCR软件 | A cross-platform software for text translation and recognize.项目地址: https://gitcode.com/pot-app/pot-desktop创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考