How to Translate an EPUB with Calibre: Plugin Setup, Output Modes, and File Checks
Calibre translates EPUBs through the third-party Ebook Translator plugin. Setup, engine and output choices, what v2.4.2 does to your markup, and how to check the result.

Calibre does not translate books by itself. You translate an EPUB in Calibre with Ebook Translator, a third-party plugin by bookfere that is listed in Calibre's plugin index. Install it from Preferences → Plug-ins → Get new plugins, pick a translation engine, choose whether you want the translation alone or next to the original, and run it on a DRM-free EPUB. You get a new EPUB in your Calibre library.
Setting it up is the quick part. What most guides skip is what the plugin does to the book along the way. We read the source code of the current release (v2.4.2) to find out, and three defaults matter more than the engine you pick:
- The default output is bilingual. Each translated paragraph is placed below the original unless you change the position setting.
- Inline formatting is flattened in the translated text. Italics, bold, and links inside a paragraph are not carried into the translation. Only a fixed list of tags, such as images, line breaks, and superscripts, is protected and put back.
- Every run is a Calibre conversion. Even EPUB to EPUB, the plugin hands the book to Calibre's conversion pipeline, which rebuilds the output file.
None of this makes the plugin a bad choice. It is free, open source (GPL-3.0), and very configurable. But you should know what to check before you read the result, or share it.
A note on method: this guide is based on the plugin's v2.4.2 source code, its official documentation, and Calibre's manual. We did not run a timed translation for this article, so it makes no claims about speed, translation quality, or which engine gives the best result.
What you need before you start
| Requirement | Detail |
|---|---|
| Calibre | Version 5.0.0 or later. This is the minimum listed for v2.4.2 in the Calibre plugin index, which shows the release date as 7 Aug 2026. |
| A DRM-free EPUB | The plugin works on the book files in your Calibre library. A store purchase locked with DRM will not translate. Check the file for DRM first. |
| A translation engine | Some engines work without an account (Google, DeepL, and Microsoft Edge free endpoints). The others need an API key, and the provider bills you separately. |
| Time to review | Plan to read and check the output. The plugin translates paragraph by paragraph. It is not a review step. |
The plugin also accepts other formats Calibre can read, such as MOBI or AZW3. Because the book goes through Calibre's conversion either way, starting from a clean EPUB gives you the most predictable output.
Install the Ebook Translator plugin
The plugin's documentation gives two ways to install it:
- From inside Calibre (recommended): open Preferences → Plug-ins → Get new plugins, search for Ebook Translator, click Install, then restart Calibre.
- From a file: download the ZIP from the plugin homepage, then use Preferences → Plug-ins → Load plug-in from file and restart.
If the plugin does not appear on the toolbar, add it under Preferences → Toolbars & menus → The main toolbar.
Calibre lists the plugin's author as bookfere.com. Calibre's team does not maintain it. Report problems to the plugin's GitHub repository, not to Calibre.
Batch Mode or Advanced Mode
The plugin has two ways to run a translation:
- Batch Mode: select one or more books, set the target language and output format, and click Translate. The job runs in Calibre's job queue. Use this for a first draft of a whole book you plan to read once.
- Advanced Mode: extract one book's paragraphs into a table, translate all of them or only selected ones, edit any translation by hand, then click Output. Use this when the book matters, for example when a few chapters need retranslating or names need fixing, because you can correct paragraphs before the EPUB is written.
If you will review the translation anyway, Advanced Mode lets you make fixes in the plugin. With Batch Mode, you would make them later in Calibre's editor.
Choose a translation engine
A free Google engine is the default. Version 2.4.2 offers these engines (names as they appear in the plugin):
| Engine group | Engines | What you need |
|---|---|---|
| Free, no key | Google (Free) in three variants, DeepL (Free), Microsoft Edge (Free) | Nothing; limits are set by the service and may change |
| Machine translation APIs | Google (Basic), Google (Basic) ADC, Google (Advanced) ADC, DeepL, DeepL (Pro), Youdao, Baidu | An account and API key, or Google Cloud credentials for the ADC options; billed by the provider |
| LLMs | ChatGPT (OpenAI), ChatGPT (Azure), Gemini, Claude (Anthropic), DeepSeek (Chat) | An API key; billed per token by the provider |
| Custom | Any HTTP endpoint you configure | Your own endpoint and response parsing |
Defaults that affect a long book:
- Interval between requests depends on the engine. In the v2.4.2 source it is 20 seconds for ChatGPT (OpenAI and Azure), 12 seconds for Claude, 1 second for Gemini and DeepL (Free), and 0 for most others. The documentation suggests raising it if the service starts refusing requests.
- Attempt times is 3, and the run aborts after 10 consecutive errors. Set the abort count to 0 to never stop automatically.
- Timeout also depends on the engine: 60 seconds for ChatGPT and DeepSeek, 30 seconds for Claude and Gemini, and 10 seconds for the rest.
- Merge to Translate is off. When it is on, the plugin sends paragraphs in batches of up to 1,800 characters. Batches give an LLM more surrounding context per request, but one bad response then affects several paragraphs at once.
- Glossary is off. When it is on, it reads a plain text file. A term and its translation go on two lines, a term to leave untranslated goes on one line, and entries are separated by blank lines.
The plugin is free, but the translation is not always free. A 300-page novel sent to a paid API is billed like any other API usage. Our guides to ChatGPT, Claude, and DeepSeek for translation explain what each model tends to get wrong in long text.
Choose target-only or bilingual output
The Translation Position setting decides the shape of the book:
| Setting | Result | Good for |
|---|---|---|
| Below original (default) | Original paragraph, then its translation | Language learners and spot-checking |
| Above original | Translation first, then the original | Reading in your language while keeping the source nearby |
| Left / Right of original (marked Beta) | Each pair becomes a table row with a gap column | Wide screens only |
| With no original | The translation replaces the original | Reading a translated book |
If you want a book you can simply read, change the position to With no original before you start, because the default produces a bilingual book.
Be careful with the left and right options. In the source, each pair is rebuilt as a table row with three cells: original, a gap, and translation. With the default 10% gap, the text columns are 45% wide each. On a phone or a 6-inch e-reader, that becomes two narrow strips of text. Our bilingual EPUB guide compares the bilingual layouts that hold up on small screens.
What the plugin changes inside your EPUB
This is the part generic tutorials leave out. The table summarizes what v2.4.2 does to each kind of content, based on the source code (lib/element.py and lib/conversion.py at tag v2.4.2).
| Content in your EPUB | What v2.4.2 does | What to check |
|---|---|---|
| Paragraphs, headings, block quotes | Extracted and translated as units | Nothing missing at chapter starts and ends |
<pre> and <code> blocks | Not translated (ignored by default) | Code samples stay in the source language, which is usually correct |
Italic, bold, <span>, and links inside a paragraph | The text is translated, but the tags are dropped from the translation | Emphasis, titles in italics, and in-text cross-references in the translated paragraph |
Images, <br>, <hr>, <sub>, <sup>, <abbr>, <math>, <svg>, and a few others | Swapped for placeholders such as {{id_00000}} before translation, then put back | Stray {{id_…}} text or missing images, if an engine altered a placeholder |
| Footnote marker written as a link around a superscript | Kept together as one protected unit | Note links still jump to the notes |
| Footnote marker written as a link with no superscript | The link is flattened like any other inline link | Note numbers that no longer link |
Ruby annotations (<rt>, <rp>) | Removed from the text sent for translation | Furigana or pinyin in Japanese or Chinese sources |
| Paragraphs of only digits and punctuation | Skipped | Page numbers and separators are left as they are |
| Table of contents entries | Translated | Chapter titles in the reader's navigation menu |
| Title, author, and other metadata | Translated only if you enable metadata translation | The library entry and the book's displayed title |
Two of these details cause the most visible damage.
Why italics and links disappear. For each paragraph, the plugin builds the text to translate from the paragraph's plain text. Only tags on its protected list are replaced with placeholders. An <em> or <a> is neither protected nor ignored, so its words are translated and its markup is lost. In bilingual mode the original paragraph keeps its formatting, so the problem only shows in the translated line. In target-only mode the formatting is gone. You can add selectors under Reserve Element, but reserving an element keeps it untranslated. That is useful for foreign phrases or book titles you want to keep, and wrong for emphasis you want translated.
Why footnotes can break. Publishers mark footnote references in different ways. The plugin has a special case for a link that wraps only a superscript (<a href="#n1"><sup>1</sup></a>) and keeps that link intact. A reference written as <a href="#n1" class="noteref">1</a> has no superscript, so the number survives but the link may not. Check notes before you trust a target-only translation of nonfiction. For Japanese and Chinese books, see how to translate EPUB ruby annotations before you decide whether losing furigana is acceptable.
The translated element also gets a lang attribute for the target language and a dir attribute, which helps e-readers choose fonts and right-to-left layout. In bilingual mode, the translation does not copy the original element's id, so existing anchors still point to the original paragraph.
Finally, Calibre's conversion manual describes how conversion works: the input is turned into XHTML, transformed, and then written by an output plugin. Along the way, Calibre's transforms can regenerate the metadata and table of contents. The plugin translates after those transforms, just before the output plugin writes the file. Your translated EPUB is therefore a rebuilt book, not your original file with new text. Calibre's manual notes that its conversion system "is not a substitute for a full blown e-book editor."
Check the translated EPUB in five minutes
Do not judge the result from the first chapter. Run a structural comparison between the original and the translated file. An EPUB is a ZIP archive, so standard command-line tools can count the markup on each side:
mkdir src out
unzip -q original.epub -d src
unzip -q translated.epub -d out
for tag in '<em' '<i[ >]' '<strong' '<a ' '<sup' '<img' '<rt'; do
s=$(grep -rhoE "$tag" src --include='*htm*' | wc -l)
o=$(grep -rhoE "$tag" out --include='*htm*' | wc -l)
printf '%-10s source=%-6s output=%s\n' "$tag" "$s" "$o"
done
grep -rho '{{id_[0-9]*}}' out | head
How to read the result:
- Target-only output with far fewer
<em>,<i>, or<atags than the source means flattened emphasis or links. That is expected from the behavior above. Decide whether the book can live without them. - Fewer
<imgtags in target-only output means an image placeholder was lost. In bilingual output, images can appear twice, so rely on the placeholder search instead. Find the chapter and fix it in Advanced Mode or Calibre's editor. - Any
{{id_…}}text means an engine changed a placeholder, so the protected element was not restored. - Bilingual output should have at least as many tags as the source, because the original paragraphs are kept.
The <em pattern also matches <embed, which is rare in books but worth knowing if a count looks odd.
Then run the W3C's EPUBCheck on the translated file. Open it in the reader you will actually use, and check the EPUB translation QA checklist: navigation, notes, images, and the last paragraph of every chapter. If the book is for other people, test it on Kindle, Kobo, and Apple Books.
If the translation stops halfway
The plugin caches translated paragraphs by default. If the network drops or the engine starts refusing requests, run the same book again with the same settings. Paragraphs that are already cached are not translated again. In practice:
- Open the job log under Jobs and look for repeated errors, which usually point to throttling or an expired API key.
- Raise Interval or lower Concurrency limit for that engine.
- Rerun the book. The cache picks up where it stopped.
- Use Cache Manager to clear a book's cache only when you want a fresh translation, for example after editing your glossary. Switching engine or target language already starts a separate cache.
When Calibre is the right tool, and when it is not
Use the Calibre plugin when:
- the book is DRM-free and already in your Calibre library;
- you want to choose and pay for the engine yourself;
- you are happy to review paragraphs in Advanced Mode; and
- the book is mostly plain prose, so losing inline formatting costs little.
Look for another workflow when:
- the book depends on inline formatting, cross-references, or linked notes, as many textbooks and academic books do;
- names and terms must stay consistent across hundreds of pages and you do not want to maintain a glossary file yourself;
- you would rather not run markup checks and repairs yourself; or
- you are not comfortable with API keys, rate limits, and job logs.
If that second list describes your book, one option is to upload the EPUB to BookTranslator and see the price before you pay. Finished tasks offer both a target-only and a bilingual download, and names and key terms are kept consistent with a built-in glossary instead of a file you write. It is a paid service. Whatever tool you use, run the same markup check above on the output, and review any long translation before you rely on it. The EPUB translation tools comparison puts the Calibre plugin, browser tools, and file services side by side, if you want to compare before choosing.
Related Posts





