Skip to content

Latest commit

 

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

便捷翻译 · macOS 菜单栏翻译工具

一个自己用的 macOS 翻译小工具:常驻菜单栏,选中文字就地翻译,不打断你手上的事。

基于苹果自带的 离线翻译框架(macOS 15+,不联网、不需要 API key), 也可以填百度翻译的凭据走在线大模型,译文质量更好。

⌥Space            ── 任何时候呼出翻译窗口
选中任意文字       ── 就地浮出翻译面板(不需要切窗口)
⌘V 粘贴截图        ── 自动 OCR 识别图中文字并翻译

下载安装

方式一:直接下打包好的(推荐)

到 Releases 页面 下载最新版 BianJieFanYi-macOS-3.3.zip(仓库里的 dist/ 目录也放了一份同样的),解压后:

  • 双击「安装.command」 —— 自动装到「应用程序」并解除系统拦截(需要输一次密码)
  • 或者手动:把 便捷翻译.app 拖进「应用程序」,然后在终端跑一次 xattr -dr com.apple.quarantine /Applications/便捷翻译.app

为什么需要这一步? 这个 app 没有苹果开发者签名(个人开发者签名要 99 美元/年), 从网上下载的文件会被 macOS 打上 com.apple.quarantine 隔离标记并被 Gatekeeper 拦下。 去掉这个标记即可正常使用 —— 这是所有个人开发的小工具的通行做法。

系统要求:macOS 15.0 或更高(离线翻译框架从 15.0 才有)。Intel / Apple Silicon 都支持。

方式二:从源码编译

只有一份 Swift 源码,不需要 Xcode 工程文件,装好 Xcode 命令行工具即可:

git clone https://github.com/MrSuuu/BianJieFanYi-ForMac.git
cd BianJieFanYi-ForMac
bash build.sh                 # 编出来 便捷翻译.app(只编本机架构,最快)
open 便捷翻译.app

功能

功能 说明
菜单栏常驻 无 Dock 图标、无自己的菜单栏(LSUIElement),⌥Space 全局呼出
自动判方向 中文→英文、英文→中文自动切换,不用手选语种;也可指定目标语种
选区浮窗 在 GitHub / Discord / 浏览器 / 邮件里选中一段文字,就地浮出翻译面板,当前软件保持前台
自动翻译 浮窗弹出即翻译,不需要手点。带 0.3s 选区防抖,拖选过程中不会乱跳
换个译法 一键轮换 标准 / 意译 / 口语化 / 学术 / 简洁(走在线大模型时生效)
截图 OCR ⌘V 或点「粘贴图片」直接识别剪贴板里的截图(苹果 Vision 框架,离线)
贴边胶囊 窗口可收成一个贴在屏幕边缘的小胶囊,可拖动换边,点一下展开
历史记录 翻过的内容存本地,可回看、复制
深浅自适应 跟随系统外观,也可手动钉死浅色/深色;四个窗口的通透度都能各自调
朗读 系统语音朗读原文/译文

使用前的一次性设置

「选区浮窗」需要 辅助功能(Accessibility)权限 —— 系统规定:任何程序想读取 其他程序的选中文字,都必须由用户在系统设置里显式授权。

  1. 菜单栏「便捷翻译」→ 设置 → 打开「开启选区浮窗」(会自动弹出授权请求)
  2. 到 系统设置 → 隐私与安全性 → 辅助功能,给「便捷翻译」打勾
  3. 之后在任意软件里选中文字,旁边就会浮出翻译面板

权限只用于读取选中文字、以及在浮窗上定位。代码全部开源在这,可以自己审。


目录结构

Sources/main.swift      全部源码(单文件,约 2300 行)
build.sh                本地开发构建(本机架构 + 自签证书签名)
package.sh              发布打包(universal 双架构 + ad-hoc 签名 + zip)
sync.sh                 一键同步到 GitHub(类型检查闸门 → commit → push)
.github/workflows/      打 tag 自动发 Release
AppIcon.icns            图标
Tools/                  生成图标的脚本(iconset + makeicon.swift)
dist/                   发布包

build.sh 与 package.sh 的区别(别混用)

build.sh package.sh
架构 只编本机(快) x86_64 + arm64,lipo 合成 universal
签名 自签证书 ad-hoc(通用)
用途 自己开发迭代 给别人下载

为什么本地开发要用自签证书? 踩过的坑,值得记一笔:

macOS 对 ad-hoc 签名的 app,把「辅助功能」授权绑死在二进制哈希(cdhash)上。 你每改一行代码重新编译,cdhash 就变一次 → 系统设置里那个勾还亮着, 但程序内部 AXIsProcessTrusted() 已经返回 false 了,授权静默失效。 开发期反复重建 = 反复重勾,根本没法用。

换成一个稳定的自签证书身份后,TCC 存的要求变成 certificate root = H"..."(绑证书), 重建多少次授权都还在。自签证书放在 .signing/(已 gitignore,不会进仓库)。


常见问题

打开后什么都没有? 它是菜单栏常驻程序 —— 没有 Dock 图标也没有窗口。看屏幕右上角菜单栏找「便捷翻译」图标, 或者按 ⌥Space 直接呼出窗口。

提示「已损坏」或「无法打开」? 是 Gatekeeper 拦截,执行 xattr -dr com.apple.quarantine /Applications/便捷翻译.app 即可。

开了浮窗但选中文字没反应? 99% 是辅助功能权限没生效。先在设置里把开关关掉再打开(会重新弹授权框), 确认系统设置里「便捷翻译」是勾上的;换过 app 版本(重新编译/下载新版)之后,需要重新授权一次。 另外 Discord / Chrome 这类 Chromium 内核的应用默认不构建无障碍树, 代码里已针对它们做了处理,但要先有权限。

为什么翻译质量一般? 没填百度凭据时走的是苹果的离线引擎 —— 优点是断网能用、不上传文字,代价是质量普通。 设置 →「百度大模型翻译」里填上 APP ID 和 API Key 就会自动切换到在线大模型 (注意:此时文字会发到百度服务器)。


说明

  • 个人自用工具,按现状提供,不保证适用于所有场景。
  • 不联网、不上传任何数据(除非你主动填了百度凭据走在线引擎)。
  • 历史记录、设置都存在本机 ~/Library/Preferences/com.zegeyoudaoli.translator.plist。

作者:泽哥有道理 · 包名 com.zegeyoudaoli.translator

About

适用于MacOS菜单栏翻译工具

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages