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.

v2.4.8发布于 2026-10-03 11:50 UTC12,269star +28 / 7 天538fork同步于 2026-11-11 05:26 UTC

专家点评

上手难度:进阶更新于 2026-11-11

Zotero 阅读器里的划词翻译层,把查词、批注、笔记三件事合并成一次选中

适用场景

  • 精读英文 PDF 文献:选中段落直接在弹窗看译文,不用切浏览器或复制到外部翻译器,注意力不离开阅读器
  • 做文献批注:高亮时把译文写进批注评论,日后回看笔记不用重新查,比手动复制粘贴可靠
  • 快速筛文献:用 Ctrl+T 翻标题和摘要,决定这篇要不要精读,比逐篇打开读摘要快
  • 需要对比译文质量:独立翻译窗口并排多个服务,适合确认术语译法再写进自己的笔记

踩坑

  • 侧栏不显示是 issue 里反应数最高的一类问题(48 反应),且集中在 Zotero 版本升级后(如 7 beta 某版本后翻译栏消失);Zotero 自动更新后先检查插件是否还加载
  • 部分翻译服务必须在设置里填 API secret,不填直接报错;默认目标语言跟随 Zotero 界面语言,中文界面下想译成英文要去 设置→Translate→Service 手动改,否则会以为翻译坏了
  • 只支持 Zotero 7/8,装在 Zotero 6 上不会工作;从 Releases 下 .xpi 手动安装,不是应用商店一键装

同类对比

如果只要离线词典查词、不需要多服务翻译和批注联动,Zotero 内置的 PDF 阅读器加系统级划词工具更轻;需要整篇文档批量翻译而非阅读时划词,应该用文档翻译工具而不是这个插件

怎么上手

由 README 提炼,执行前请确认
从 Releases 下载 .xpi 文件,在 Zotero 中依次点击 工具 → 插件 → 齿轮图标 → Install Plugin from file,选择该 .xpi 安装
硬件要求按 README 说明

README 未说明

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

Zotero 插件,在阅读器里直接翻译 PDF、EPub 和网页,支持 20 多个翻译服务

Zotero 插件,能把 PDF、EPub、网页、元数据和批注翻译成目标语言,接入 20 多家翻译服务,解决看外文文献时的语言障碍。

核心能力

  • 选中文本即在弹窗和条目面板显示译文
  • 高亮或下划线时把译文写入批注评论
  • 把选中文本连同译文一键加入笔记
  • 用 Ctrl+T 或右键菜单翻译条目标题与摘要
  • 独立翻译窗口可对比多个服务的译文

容易踩的坑

需要 Zotero 7/8,旧版本不兼容;部分翻译服务需在设置里填 API secret,否则报错;默认目标语言跟随 Zotero 界面语言,需在 设置→Translate→Service 手动改

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v2.4.8
  1. 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

  2. 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

    ✅ Tests

    ❤️ Contributors

  3. v2.4.7Release v2.4.72026-08-18 · 2026-08-18 14:07 UTC
    查看更新说明

    🚀 Enhancements

    • Add iCIBA translate service (#1443)
    • service: Add MyMemory translate service (#1456)

    🩹 Fixes

    • bing: Adopt new Microsoft Edge translation interface (#1455)

    ❤️ Contributors

  4. v2.4.6Release v2.4.62026-08-01 · 2026-08-01 17:35 UTC
    查看更新说明

    🩹 Fixes

    • Clarify NiuTrans insufficient balance error (#1450)
    • Sort Pali and Tibetan in alphabetical order, fixes #1442 (#1444, #1442)

    🏡 Chore

    ❤️ Contributors

  5. 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

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    Translate for ZoteroTranslate for Zotero

    zotero target version Using Zotero Plugin Template

    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 .xpi and select "Save As.."

    • In Zotero click Tools in the top menu bar and then click Plugins

    • 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 .xpi file 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 Annotation to 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+P and select Translate 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, default false
    • 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 true

      Invisible if no active note editor opened.

      • Replace Raw: Use translation to replace the raw text when adding to note, default false
    • 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

    Service

    The default service is Google Translate. Currently, we support:

    Translate ServiceRequire SecretSupported Languages
    Google TranslateNo [Free]100+
    Google Translate(API)No [Free]Use translate.googleapis.com
    CNKINo [Free]https://dict.cnki.net
    Haici TranslateNo [Free]https://fanyi.dict.cn
    Youdao TranslateNo [Free]100+?
    iCIBA TranslateNo [Free]https://www.iciba.com/translate
    MyMemoryNo [Free 5k/day per IP]https://mymemory.translated.net/(Free upgrade: enter your email in Settings to get 50k/day per IP quota)
    BingNo [Free]en-zh
    DeepLXNo [Free]Based on DeepLX
    DeepLX(API)No [Require config]DeepLX related projects
    LibreTranslateOptional [Require config]LibreTranslate
    MTranServerOptional [Require config]MTranServer
    NLLBNo [Require config]nllb-api or NLLB Serve
    PotNo [Require config]Pot Translate results show in Pot
    HuoshanYes50+
    Volcengine WebNo [Free]en, zh, and more (auto-detect, web version)
    Youdao ZhiyunYes100+
    Youdao LLMYesLLM-based(en-zh)
    Niu TransYes400+
    Microsoft TranslateYes(free 2M)200+
    LingoCloud(Caiyun) TranslateYes10+
    DeepL TranslateYes(free 500k)100+
    Aliyun TranslateYes(free-1M)200+
    Baidu TranslateYes(free-QPS1/free-2M)200+
    Baidu FieldYes(free-QPS1/free-2M)en-zh
    OpenLYes11
    Tencent TranslateYes(QPS5, free-5M)15
    Tencent TransmartNo [Free]en, zh, and more (auto-detect, web version)
    XftransYes(free 2M)Xftrans API(70+), NiuTrans API(100+)
    GPTYes(free-$18)OpenAI(ChatGPT), AzureGPT, compatible GPT-like LLM (Custom GPT)
    GeminiYes(free-)LLM-based
    Qwen-MTYes(free-)LLM-based
    ClaudeYesLLM-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 即可。
    About Config -> Domain
    登录控制台,点击创建应用,输入应用名称,在选择服务一栏勾选文本翻译,然后勾选领域化翻译即可开通领域化翻译。领域化翻译仅支持中英互译。

    Official Document

    Youdao LLM Translate 有道智云子曰大模型
    Apply here.
    The secret format is MY_APPID#MY_SECRET.

    登录控制台,点击创建应用,输入应用名称,在选择服务一栏勾选大模型翻译,大模型翻译仅支持中英互译。

    Official Document

    NiuTrans
    Apply here.
    The secret format is MY_APIKEY#dictNo(optional)#memoryNo(optional).

    Chinese Document

    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. For cn-hangzhou, the endpoint is mt.cn-hangzhou.aliyuncs.com. See also here.

    Chinese Document

    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合同领域中文(简)-> 英语、英语 -> 中文(简)

    Chinese Document

    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

    Chinese Document

    Tencent Translate
    Apply here.
    The secret format is secretId#SecretKey#Region(optional, default ap-shanghai)#ProjectId(optional, default 0)(split with '#').

    Chinese Document

    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.

    Chinese Document

    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-en language pairs for v2.1.1 and previous versions. For MTranServer v3.0.0+, please check the checkbox in the Config panel to use zh-Hans or zh-Hant language. 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, default 12
    • Line Height: The line height of result text, default 1.5
    • Item Context Menu: Show xxx: Show or hide Title/Abstract tanslation, default true
    • Item Pane Section: Show xxx: Show or hide elements in the item pane, default true
    • Item Pane Section: Hold down Ctrl/⌘: Press key to enable concat mode when selecting text in PDF/EPub/webpage if true, default true
    • Item Pane Section: Reverse Raw/Result: Reverse the order of Raw/Result in the item pane if true, default false
    • Item Pane Info: Show xxx: Show or hide Title/Abstract tanslation in the item info rows
    • Standalone: Keep Windows on Top: Top the standalone translate panel if true, default false
    • Pop-up: Remember Size: Remember size of pop-up if true, else automatically adjust the size, default false

    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 zh and ja files, set zh,ja. Default zh,zh-CN,中文.
    • 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

    1. Copy src/modules/services/_template.ts > src/services/<your-service-id>.ts;
    2. 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.result if runs successfully and throws an error if fails;
    3. Import the new service object in src/modules/services/index.ts.
    4. Add locale string service.${serviceId} and service-<your-service-id>-dialog-xxx(if necessary) in addon/locale/${lang}/addon.ftl.
    5. Build and test.

    Disclaimer

    Use this code under AGPL. No warranties are provided. Keep the laws of your locality in mind!

    My Zotero Plugins

    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.

    Contributors