- 精读英文 PDF 文献:选中段落直接在弹窗看译文,不用切浏览器或复制到外部翻译器,注意力不离开阅读器
- 做文献批注:高亮时把译文写进批注评论,日后回看笔记不用重新查,比手动复制粘贴可靠
- 快速筛文献:用 Ctrl+T 翻标题和摘要,决定这篇要不要精读,比逐篇打开读摘要快
- 需要对比译文质量:独立翻译窗口并排多个服务,适合确认术语译法再写进自己的笔记
zotero-pdf-translate
windingwindAGPL-3.0活跃维护 有专家点评Zotero 插件,能把 PDF、EPub、网页、元数据和批注翻译成目标语言,接入 20 多家翻译服务,解决看外文文献时的语言障碍。
Translate PDF, EPub, webpage, metadata, annotations, notes to the target language. Support 20+ translate services.
专家点评
上手难度:进阶更新于 2026-11-11Zotero 阅读器里的划词翻译层,把查词、批注、笔记三件事合并成一次选中
适用场景
踩坑
- 侧栏不显示是 issue 里反应数最高的一类问题(48 反应),且集中在 Zotero 版本升级后(如 7 beta 某版本后翻译栏消失);Zotero 自动更新后先检查插件是否还加载
- 部分翻译服务必须在设置里填 API secret,不填直接报错;默认目标语言跟随 Zotero 界面语言,中文界面下想译成英文要去 设置→Translate→Service 手动改,否则会以为翻译坏了
- 只支持 Zotero 7/8,装在 Zotero 6 上不会工作;从 Releases 下 .xpi 手动安装,不是应用商店一键装
同类对比
如果只要离线词典查词、不需要多服务翻译和批注联动,Zotero 内置的 PDF 阅读器加系统级划词工具更轻;需要整篇文档批量翻译而非阅读时划词,应该用文档翻译工具而不是这个插件
从 Releases 下载 .xpi 文件,在 Zotero 中依次点击 工具 → 插件 → 齿轮图标 → Install Plugin from file,选择该 .xpi 安装README 未说明
项目说明
由 README 自动翻译提炼Zotero 插件,在阅读器里直接翻译 PDF、EPub 和网页,支持 20 多个翻译服务
Zotero 插件,能把 PDF、EPub、网页、元数据和批注翻译成目标语言,接入 20 多家翻译服务,解决看外文文献时的语言障碍。
核心能力
- 选中文本即在弹窗和条目面板显示译文
- 高亮或下划线时把译文写入批注评论
- 把选中文本连同译文一键加入笔记
- 用 Ctrl+T 或右键菜单翻译条目标题与摘要
- 独立翻译窗口可对比多个服务的译文
容易踩的坑
需要 Zotero 7/8,旧版本不兼容;部分翻译服务需在设置里填 API secret,否则报错;默认目标语言跟随 Zotero 界面语言,需在 设置→Translate→Service 手动改
- v2.5.0-beta.1Release v2.5.0-beta.1pre-release2026-11-10 · 2026-11-10 08:25 UTC
查看更新说明
🩹 Fixes
- claude: Omit temperature for models that deprecated it (#1499)
- Replace removed ownerGlobal for Zotero 11 (Firefox 153) (#1486)
🏡 Chore
- Upgrade to min version 11 (cc0691e)
❤️ Contributors
- Windingwind (@windingwind)
- Zhao Zuohong (@ZhaoZuohong)
- 小卡塔克 (@Goldloli)
- v2.4.8Release v2.4.8最新正式版2026-10-03 · 2026-10-03 11:50 UTC
🚀 Enhancements
- Add thinking level option for LLM translation services (#1477)
- Add Serbian Latin (sr-Latn-RS) translations (#1482)
- gpt: Add API format option for custom GPT services (#1478)
🩹 Fixes
- huoshanweb: Use trailing-slash endpoint to avoid 307 redirect (#1462)
- cnki: Read token from response.data instead of response.token (#1460)
- youdao: Migrate to web demo API as fanyi.youdao.com/translate is dead (#1461)
- Update the webpage url of Cambridge Dictionary (English to English) (#1463)
- GPT services prompt placeholder verification (#1458)
- Preserve audio data from cached translation task (#1465)
- Tests start with mock server (4ae0a6c)
💅 Refactors
- Move LLM prompt to system message for better instruction following (#1472)
🏡 Chore
- Remove prompt module (3d7b6c5)
✅ Tests
- Add ci tests (5d07c40)
❤️ Contributors
- Windingwind (@windingwind)
- Ouyangjiahong (@ouyangjiahong26)
- Branislav Kapetanović
- L0o0
- Howdareyou (@howdareyou)
- Taoquan Zhang (@taoquanooo)
- v2.4.7Release v2.4.72026-08-18 · 2026-08-18 14:07 UTC
- v2.4.6Release v2.4.62026-08-01 · 2026-08-01 17:35 UTC
- v2.4.5Release v2.4.52026-06-10 · 2026-06-10 11:11 UTC
查看更新说明
🚀 Enhancements
- Adding gramota.ru as a word service for Russian (#1434)
🩹 Fixes
- Word boundaries detection made with Intl.Segmenter (#1433)
- Issue bot (9f5f46c)
- Pr bot to correctly commit lint changes (be0eb0f)
❤️ Contributors
- Windingwind (@windingwind)
- Artiom Neganov (@DataMincer)
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
Translate for Zotero
Translate for Zotero, a.k.a. Zotero PDF Translate, is a Zotero plugin.
Translate PDF, EPub, webpage, metadata, annotations, notes to the target language. Support 20+ translate services.

Quick Start Guide
Install
-
Download the plugin (.xpi file) from below.
Note If you're using Firefox as your browser, right-click the
.xpiand select "Save As.." -
In Zotero click
Toolsin the top menu bar and then clickPlugins -
Go to the Extensions page and then click the gear icon in the top right.
-
Select
Install Plugin from file. -
Browse to where you downloaded the
.xpifile and select it. -
Finish!
Usage
Open any PDF/EPub/webpage in the Zotero reader.
-
Select text, the translations are shown on the pop-up and the item pane(v0.2.0).

-
Highlight/Underline some text, the translations are added to the annotation comment(v0.3.0); Modify & retranslate the annotation text in the item pane and click the
Update Annotationto modify the annotation text and translation(v0.6.6); -
Add selected text along with translation to note(v0.4.0); Only works when a note editor is active.

-
Translate item titles with right-click menu or shortcut
Ctrl+T(v0.6.0). -
Translate item abstract with right-click menu(v0.8.0). Thanks @iShareStuff
-
Standalone translation window available(v0.7.0). View & compare translations from multiply services in one window!

-
Dictionary for single word translation(v0.7.1).
-
SentenceBySentence Translation(v1.1.0). After a translation, press
shift+Pand selectTranslate Sentences. Only for en2zh and en2en now. Thanks @MuiseDestiny -
Since v2.2.0, the concat mode shortcut is ctrl (on Windows/Linux) or ⌘ (on macOS).
Q&A
Q I want to translate manually.
A Go to Edit->Settings->Translate->General, uncheck the Automatically Translate Selection. Click the Translate button on the pop-up or item pane to translate.
Q I want a translate shortcut.
A
Press shortcut Ctrl+T after you selected some text. If you are in the collection view, the titles' translation will show/hide.
Q I want to concat different selections and translate them together.
A Press Ctrl/⌘ or select the Concat Mode check box on item pane when selecting text in PDF/EPub/webpage.
Q Not the language I want.
A The default target language is the same as your Zotero language. Go to Edit->Settings->Translate->Service and change the language settings.
Q Translation not correct or report an error.
A See Language Settings above and FAQ(#6). Make sure you use the right secret.
Q I want to change the font size.
A Go to Edit->Settings->Translate->User Interface and set the font size.
Q I want to resize the raw and result text area in the translate panel.
A Drag the separator up and down to adjust the size. Double-click the separator to reset the size.
Settings
General
- Automatically Translate Selection, default
true - Automatically Translate Annotation: Save annotation's translation to annotation comment or annotation body, default
false- Automatically Translate Annotation from Sync: Automatically translate annotations synced from other devices if
true, defaultfalse
- Automatically Translate Annotation from Sync: Automatically translate annotations synced from other devices if
- Enable Reader Selection Pop-up: Show results in the pop-up panel or only in the item pane, default
true - Show "Add Translation to Note" in Pop-up: default
trueInvisible if no active note editor opened.
- Replace Raw: Use translation to replace the raw text when adding to note, default
false
- Replace Raw: Use translation to replace the raw text when adding to note, default
- Enable Dictionary: Single word will be translated using dictionary service instead of translate service, default
true- Show Play Buttons: Show the word pronunciation play buttons if available, default
true - Auto-play Pronunciation, default
false
- Show Play Buttons: Show the word pronunciation play buttons if available, default
Service
The default service is Google Translate. Currently, we support:
| Translate Service | Require Secret | Supported Languages |
|---|---|---|
| Google Translate | No [Free] | 100+ |
| Google Translate(API) | No [Free] | Use translate.googleapis.com |
| CNKI | No [Free] | https://dict.cnki.net |
| Haici Translate | No [Free] | https://fanyi.dict.cn |
| Youdao Translate | No [Free] | 100+? |
| iCIBA Translate | No [Free] | https://www.iciba.com/translate |
| MyMemory | No [Free 5k/day per IP] | https://mymemory.translated.net/(Free upgrade: enter your email in Settings to get 50k/day per IP quota) |
| Bing | No [Free] | en-zh |
| DeepLX | No [Free] | Based on DeepLX |
| DeepLX(API) | No [Require config] | DeepLX related projects |
| LibreTranslate | Optional [Require config] | LibreTranslate |
| MTranServer | Optional [Require config] | MTranServer |
| NLLB | No [Require config] | nllb-api or NLLB Serve |
| Pot | No [Require config] | Pot Translate results show in Pot |
| Huoshan | Yes | 50+ |
| Volcengine Web | No [Free] | en, zh, and more (auto-detect, web version) |
| Youdao Zhiyun | Yes | 100+ |
| Youdao LLM | Yes | LLM-based(en-zh) |
| Niu Trans | Yes | 400+ |
| Microsoft Translate | Yes(free 2M) | 200+ |
| LingoCloud(Caiyun) Translate | Yes | 10+ |
| DeepL Translate | Yes(free 500k) | 100+ |
| Aliyun Translate | Yes(free-1M) | 200+ |
| Baidu Translate | Yes(free-QPS1/free-2M) | 200+ |
| Baidu Field | Yes(free-QPS1/free-2M) | en-zh |
| OpenL | Yes | 11 |
| Tencent Translate | Yes(QPS5, free-5M) | 15 |
| Tencent Transmart | No [Free] | en, zh, and more (auto-detect, web version) |
| Xftrans | Yes(free 2M) | Xftrans API(70+), NiuTrans API(100+) |
| GPT | Yes(free-$18) | OpenAI(ChatGPT), AzureGPT, compatible GPT-like LLM (Custom GPT) |
| Gemini | Yes(free-) | LLM-based |
| Qwen-MT | Yes(free-) | LLM-based |
| Claude | Yes | LLM-based |
If the service you want is not yet supported, please post an issue.
Google
Google does not require a secret, but you can put your own API URL in the secret to replace the default URL (translate.google.com/translate.googleapi.com).
Huoshan
Apply here.
The secret format is accessKeyId#accessKeySecret
Youdao Zhiyun Translate 有道智云
Apply here.
The secret format is MY_APPID#MY_SECRET#MY_VOCABID(optional).
About
VOCABID
登录控制台,选择文本翻译服务,点击右侧的术语表,选择新建,填写表名称和语言方向,添加需要的术语表,然后获取对应词表 id 即可。
AboutConfig -> Domain
登录控制台,点击创建应用,输入应用名称,在选择服务一栏勾选文本翻译,然后勾选领域化翻译即可开通领域化翻译。领域化翻译仅支持中英互译。
Youdao LLM Translate 有道智云子曰大模型
Apply here.
The secret format is MY_APPID#MY_SECRET.
登录控制台,点击创建应用,输入应用名称,在选择服务一栏勾选大模型翻译,大模型翻译仅支持中英互译。
NiuTrans
Apply here.
The secret format is MY_APIKEY#dictNo(optional)#memoryNo(optional).
Microsoft Translate
Apply here. Copy your secret and paste it into the settings.
The secret format is serviceKEY#region(required if the region is not global).
See this issue for detailed steps to set up the Microsoft Translate.
LingoCloud(Caiyun) Translate
Apply here.
DeepL Translate
Apply official API or third-party API.
The secret format is secretToken or secretToken#glossaryId (if you want to specify some translate glossary).
Aliyun Translate
Apply here.
The secret format is accessKeyId#accessKeySecret#endpoint(optional).
The endpoint is the region of the service, default
https://mt.aliyuncs.com. Forcn-hangzhou, the endpoint ismt.cn-hangzhou.aliyuncs.com. See also here.
Baidu Translate
Apply here.
The secret format is MY_APPID#MY_KEY#ACTION(optional, see https://api.fanyi.baidu.com/doc/21, default 0)(split with '#').
Baidu Field Translate 百度垂直领域翻译
Apply here.
The secret format is MY_APPID#MY_KEY#DOMAIN_CODE(split with '#').
| Domain Code | 领域 | 支持语言方向 |
|---|---|---|
| it | 信息技术领域 | 中文(简)-> 英语、英语 -> 中文(简) |
| finance | 金融财经领域 | 中文(简)-> 英语、英语 -> 中文(简) |
| machinery | 机械制造领域 | 中文(简)-> 英语、英语 -> 中文(简) |
| senimed | 生物医药领域 | 中文(简)-> 英语、英语 -> 中文(简) |
| novel | 网络文学领域 | 中文(简)-> 英语 |
| academic | 学术论文领域 | 中文(简)-> 英语、英语 -> 中文(简) |
| aerospace | 航空航天领域 | 中文(简)-> 英语、英语 -> 中文(简) |
| wiki | 人文社科领域 | 中文(简)-> 英语 |
| news | 新闻资讯领域 | 中文(简)-> 英语、英语 -> 中文(简) |
| law | 法律法规领域 | 中文(简)-> 英语、英语 -> 中文(简) |
| contract | 合同领域 | 中文(简)-> 英语、英语 -> 中文(简) |
OpenL Translate
Apply here.
The secret format is service1,service2,...#apikey(split with '#'; split service codes with ',').
Supported service codes are: deepl,youdao,tencent,aliyun,baidu,caiyun,wechat,sogou,azure,ibm,aws,google, See Service Code
Tencent Translate
Apply here.
The secret format is secretId#SecretKey#Region(optional, default ap-shanghai)#ProjectId(optional, default 0)(split with '#').
Xftrans 讯飞翻译
Apply here.
GPT
Apply OpenAI ChatGPT API or Azure OpenAI REST API.
The secret format is sk-* for ChatGPT, and MY_APIKEY for AzureGPT and Custom GPT.
Support third-party or self-deployed compatible APIs.
Gemini
Apply here.
The secret format is MY_APIKEY.
Qwen-MT
Apply here.
The secret format is MY_APIKEY.
Claude
Apply here.
LibreTranslate
See LibreTranslate. API Key is optional.
MTranServer
See MTranServer. Token is optional.
MTranServer only supports
zh-enlanguage pairs for v2.1.1 and previous versions. For MTranServer v3.0.0+, please check the checkbox in the Config panel to usezh-Hansorzh-Hantlanguage. See explanation of the supported languages.
NLLB
See nllb-api or NLLB Serve.
Pot
See Pot. Translate results show in Pot.
User Interface
Font Size: The font size of result text, default12Line Height: The line height of result text, default1.5Item Context Menu: Show xxx: Show or hide Title/Abstract tanslation, defaulttrueItem Pane Section: Show xxx: Show or hide elements in the item pane, defaulttrueItem Pane Section: Hold down Ctrl/⌘: Press key to enable concat mode when selecting text in PDF/EPub/webpage iftrue, defaulttrueItem Pane Section: Reverse Raw/Result: Reverse the order of Raw/Result in the item pane iftrue, defaultfalseItem Pane Info: Show xxx: Show or hide Title/Abstract tanslation in the item info rowsStandalone: Keep Windows on Top: Top the standalone translate panel iftrue, defaultfalsePop-up: Remember Size: Remember size of pop-up iftrue, else automatically adjust the size, defaultfalse
Advanced
- Strip empty lines and thinking from translation results: Automatically remove empty lines or thinking labels from translation results, especially for some LLM translation services.
- Automatically Detect Item Language
- Disable Automatic Translation when File Language is(comma-separated): If you want to disable automatic translation in
zhandjafiles, setzh,ja. Defaultzh,zh-CN,中文.
- Disable Automatic Translation when File Language is(comma-separated): If you want to disable automatic translation in
- Delimiter (between text and translation): When translating annotations, the result will be wrapped inside this character to allow safe re-translate. If set to empty, re-translating annotations will replace the annotation comment/body with the new translate result.
- Regex for removing extra text from translation results (leave empty to disable): Automatically remove text from translation results using regex. You need to understand how to use regex in advance.
- Reset field of selected items in library: Batch reset the Title Translation or Abstract Translation of selected items. Please select the items in Library or Collection panel and then click the button.
Development & Contributing
This plugin is built based on the Zotero Plugin Template. See the setup and debug details there.
To startup, run
git clone https://github.com/windingwind/zotero-pdf-translate.git
cd zotero-pdf-translate
npm install
npm run build
The plugin is built to ./build/*.xpi.
Contributing
Add new translate service
- Copy
src/modules/services/_template.ts>src/services/<your-service-id>.ts; - Fill in the required fields (id, type, and translate) and optional fields (name, helpUrl, defaultSecret, secretValidator(secret), and config(settings)) following the introduction. The translation function sets the translation result to
data.resultif runs successfully and throws an error if fails; - Import the new service object in
src/modules/services/index.ts. - Add locale string
service.${serviceId}andservice-<your-service-id>-dialog-xxx(if necessary) inaddon/locale/${lang}/addon.ftl. - Build and test.
Disclaimer
Use this code under AGPL. No warranties are provided. Keep the laws of your locality in mind!
My Zotero Plugins
- Better Notes for Zotero: Everything about note management. All in Zotero.
- Actions & Tags for Zotero: Customize your Zotero workflow.
- Bionic for Zotero: Bionic reading experience with Zotero.
Sponsors
Thanks peachgirl100, youngfish42, and other anonymous sponsors!
If you want to leave your name here, please email me or leave a message with the donation.