# Translate for Zotero: a reader-embedded translation plugin for PDFs, EPubs and metadata

> Zotero PDF Translate puts 20+ translation services inside the Zotero 7/8 reader, so highlights, annotations and notes carry their translations with them. Here is how it installs, what it does well, and where it stops.

**windingwind/zotero-pdf-translate** — Translate PDF, EPub, webpage, metadata, annotations, notes to the target language. Support 20+ translate services.

- Repository: https://github.com/windingwind/zotero-pdf-translate
- Stars: 11,957 · Forks: 524
- Language: TypeScript
- License: AGPL-3.0
- Published: 2026-09-21 · Updated: 2026-09-21 · Language: en
- Canonical page: https://hysenlabs.com/projects/windingwind-zotero-pdf-translate

## What Translate for Zotero solves, and for whom

Zotero stores the paper; it does not translate it. If you read English-language PDFs in a second language, the usual workaround is copying text into a browser tab or a machine translation site, then pasting the result somewhere you will never find it again. Translate for Zotero closes that loop by putting the translation inside the Zotero reader itself. The README describes the plugin as translating "PDF, EPub, webpage, metadata, annotations, notes to the target language" and lists support for more than 20 translation services. The audience is narrow and specific: researchers, students and librarians who already keep their library in Zotero and read inside its built-in reader. If your reading happens in a standalone PDF viewer or a browser tab, this plugin has nothing to attach to. The release history shows steady work on the Zotero 7/8 line, with v2.4.7 published on 2026-08-18 and the last push to the default branch on 2026-09-21, so the plugin is being kept current with the Zotero versions it targets.

## How the translation actually flows through the reader

The mechanism is selection-driven, not document-driven. You open a PDF, EPub or webpage in the Zotero reader and select text; the translation appears in a pop-up panel and in the item pane, a behaviour the README dates to v0.2.0. From there the output can be routed to three destinations. Highlighting or underlining text writes the translation into the annotation comment (v0.3.0), and the item pane exposes an Update Annotation action to edit and retranslate that text (v0.6.6). Selected text plus its translation can be appended to a note (v0.4.0), which the README notes only works when a note editor is active. Item titles and abstracts have their own right-click entries, with Ctrl+T bound to title translation since v0.6.0. Two details matter for how you use it. Concat mode, bound to ctrl on Windows and Linux or Command on macOS since v2.2.0, lets you gather several selections and translate them as one block, which is the closest thing to translating a whole page. And a standalone window (v0.7.0) shows results from multiple services side by side, which is the practical way to compare providers when one output looks wrong. Sentence-by-sentence translation exists since v1.1.0 via shift+P and the Translate Sentences menu item, but the README restricts it to en2zh and en2en.

## Installing the .xpi and translating your first selection

There is no add-on store listing to click. The README points to the Latest Stable release on GitHub and to the full releases page, and the artifact is an .xpi file. Firefox users get one extra instruction: right-click the .xpi and choose Save As, rather than letting the browser try to install it as a browser extension. Once the file is on disk, Zotero installs it from the Plugins pane. Open Tools in the top menu bar, then Plugins, then the gear icon in the top right of the Extensions page, then Install Plugin from file, and select the downloaded .xpi. After that, open any PDF in the Zotero reader and select a sentence. With the default settings, the translation appears without any further action, because Automatically Translate Selection defaults to true. If you prefer to trigger it yourself, that is a single checkbox under Edit->Settings->Translate->General, and the Translate button on the pop-up or item pane takes over. The default service is Google Translate, and the default target language follows your Zotero interface language, so a reader whose Zotero runs in Chinese gets Chinese output without configuration. Changing either one happens under Edit->Settings->Translate->Service.

## Where the plugin stops being the right tool

The most important limitation is scope: everything happens inside the Zotero reader. A PDF sitting in a browser tab, a mail attachment or a colleague's shared drive is out of reach until it is in your Zotero library and opened there. The second limitation is the network. The documented service list is built from remote providers, from Google Translate and Google Translate (API) through CNKI, Haici, Youdao, iCIBA and MyMemory, and the README marks several of them as requiring a secret. There is no offline engine described in the README, so air-gapped machines and locked-down networks are a poor fit. Third, the service table itself is uneven: MyMemory is annotated as free at 5k per day per IP with a free upgrade to 50k by entering an email in Settings, while other entries carry no quota note at all, which means throughput expectations have to be checked per service rather than assumed. Fourth, the sentence-by-sentence mode is documented as en2zh and en2en only, so anyone working between other language pairs should not plan around it. Finally, the README's own troubleshooting answer for bad output or errors is to check the language settings and make sure the right secret is used, which tells you the common failure is configuration rather than a missing feature.

## How it compares with Zotero's built-in PDF tools and browser translation

Zotero's own reader gives you highlighting, annotation and note-taking, but no translation, so the honest comparison is with the workflow you would otherwise build around it. Browser translation, whether in Chrome or a PDF viewer extension, translates a whole document in place and is genuinely better for reading a paper end to end in one pass. What it cannot do is write the translation into a Zotero annotation comment, keep it attached to the highlight, or add it to a note. That is the specific gap this plugin fills, and it is the reason to choose it over a browser tab even though the browser handles full-document translation more directly. The second comparison is with the standalone translation window inside the plugin, which is worth understanding as a different mode rather than a duplicate: the reader pop-up is for the sentence in front of you, while the standalone window is for comparing several services on the same input. The README's own framing of that window is "View & compare translations from multiply services in one window", which is a quality-checking tool, not a reading tool.

## Settings worth changing before you rely on it

The defaults are tuned for low friction, not for accuracy, and three of them are worth revisiting. Automatically Translate Annotation defaults to false, so highlights do not carry translations until you turn it on; the sub-option Automatically Translate Annotation from Sync is also false by default, which matters if you annotate on a tablet and expect the translations to appear on your desktop. Enable Dictionary defaults to true, which routes single-word selections to a dictionary service instead of the translate service, a good default for vocabulary but a surprise if you wanted a one-word phrase translated in context. Show Play Buttons and Auto-play Pronunciation are separate toggles, with Auto-play off by default. Two interface settings are easy to miss: font size lives under Edit->Settings->Translate->User Interface, and the split between raw text and result text in the panel is adjusted by dragging the separator, with a double-click resetting it. None of this is documented as a single recommended configuration, so the practical approach is to change one setting at a time and watch the item pane.

## Licence, maintenance and what an upgrade costs you

The licence is AGPL-3.0-or-later, declared in package.json and shipped as a LICENSE file at the repository root. For an individual researcher installing the .xpi, that is the end of the story. For anyone embedding the plugin in a distributed product or a hosted service, the copyleft terms carry source-disclosure obligations, and that is a question for your own legal review rather than something the README addresses. On maintenance, the repository is not archived, the last push to the default branch was on 2026-09-21, and the most recent tagged release is v2.4.7 from 2026-08-18, following v2.4.6 on 2026-08-01 and v2.4.5 on 2026-06-10. The upgrade path is the same as the install path: download the newer .xpi from the releases page and install it over the existing one. The repository also carries update.json, update-beta.json and update.rdf at the top level, which is how Zotero's own update mechanism finds new versions, though the README does not describe what those files contain or how the update channel behaves. There is no documented rollback procedure, so if a release breaks your workflow the recovery is to reinstall an older .xpi by hand.

## Conclusion

Adopt Translate for Zotero if your reading happens inside Zotero and you want translation attached to the annotations and notes rather than in a separate window. Skip it if your PDFs live in a browser or an external reader, because the plugin only works inside the Zotero reader, and skip it if you need a fully offline engine, since the documented services are network calls. Before relying on it, verify two things yourself: which service you select under Edit->Settings->Translate->Service, and whether the secret that service requires is accepted, since the README attributes failures to the wrong secret. The AGPL-3.0-or-later licence also means anyone redistributing a modified build takes on source-disclosure obligations, so check that before shipping it inside an institution.

## FAQ

### How do I install Translate for Zotero?

Download the .xpi from the Latest Stable release on GitHub, then in Zotero open Tools, then Plugins, click the gear icon, choose Install Plugin from file and select the .xpi. Firefox users should right-click the .xpi and pick Save As instead of letting the browser install it.

### Can Translate for Zotero translate a whole PDF at once?

The documented workflow is selection-based rather than whole-document. Concat mode, bound to ctrl on Windows and Linux or Command on macOS, lets you gather several selections and translate them together, and sentence-by-sentence translation is available through shift+P and Translate Sentences, though the README limits that mode to en2zh and en2en.

### Which translation services does Translate for Zotero support?

The README lists more than 20 services, with Google Translate as the default and Google Translate (API), CNKI, Haici, Youdao, iCIBA and MyMemory among the documented entries. Several require a secret, and the service is chosen under Edit->Settings->Translate->Service.

### Why is my translation wrong or showing an error in Translate for Zotero?

The README's troubleshooting answer is to check the language settings and make sure you are using the right secret for the selected service. The service and language are both configured under Edit->Settings->Translate->Service.

### How do I change the target language in Translate for Zotero?

The default target language matches your Zotero language. To change it, go to Edit->Settings->Translate->Service and adjust the language settings there.

## Sources

- [Issues](https://github.com/windingwind/zotero-pdf-translate/issues)
- [License: AGPL-3.0](https://github.com/windingwind/zotero-pdf-translate/blob/main/LICENSE)
- [README](https://github.com/windingwind/zotero-pdf-translate/blob/main/README.md)
- [Releases](https://github.com/windingwind/zotero-pdf-translate/releases)
- [windingwind/zotero-pdf-translate on GitHub](https://github.com/windingwind/zotero-pdf-translate)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/windingwind-zotero-pdf-translate
