以前我會使用線上服務例如 onlinedoctranslator.com 將英文版 pdf 電子書翻譯成繁體中文版, 但如果來源檔不是 pdf (例如 epub) 就沒辦法, 參考 :
其實使用免費的 AI 工具像是 Antigravity 就可以因應書本題材選擇不同模型將 pdf/epub 電子書翻譯成繁體中文版, 可先轉成可編輯的 docx 檔, 然後再轉成 pdf.
以下測試使用下列免費電子書 (英文版) 做為來源文本 :
下載網頁上的 "Pro Git" 這本書的 pdf 與 epub 檔後, 建立兩個專案目錄 pdf-ebook-translate 與 epub-ebook-translate, 分別將這兩個檔案搬移到各自的專案目錄下 :
更多免費電子書資源參考 :
1. 系統架構 :
我本來是想每次要翻譯時便建立一個專案來做, 但與 Gemini 討論後發現, 翻譯其實是一個經驗累積與不斷演進的過程, 每本書如果是用獨立的專案來翻譯, 那麼術語, 版式, 翻譯腳本等資產每次都要重新產生, 沒有辦法重複使用與演進, 應該建立一個翻譯工廠專案來處理所有電子書的翻譯工作, 只要有新的電子書要翻譯, 就將它複製到專案目錄下, 用提示詞叫 AI 翻譯即可.
(1). 建立檔案目錄架構 :
Gemini 建議的檔案目錄架構如下 :
但我們不用自己建這些檔案目錄結構, 只要先建一個專案目錄例如 book-translator-workspace 即可, 其餘可用提示詞叫 Antigravity 來做 :
PS D:\antigravity_cli\projects> mkdir book-translator-workspace
目錄: D:\antigravity_cli\projects
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2026/9/10 下午 06:29 book-translator-workspace
然後切換到此專案資料夾下, 用 agy 指令啟動 Antigravity CLI :
PS D:\antigravity_cli\projects> cd book-translator-workspace
PS D:\antigravity_cli\projects\book-translator-workspace> agy
Accessing workspace:
D:\antigravity_cli\projects\book-translator-workspace
Do you trust the contents of this project?
Antigravity CLI requires permission to read, edit, and execute files here.
> Yes, I trust this folder
No, exit
然後將下列提示詞貼給 agy, 讓它建立上面的檔案目錄結構, 這是我叫 Gemini 自動產生的 :
請依照以下結構,幫我在當前工作區建立完整的目錄與檔案:
- 目錄與檔案清單:
- shared/config/glossary.json(請初始化寫入 {},避免 JSON 解析錯誤)
- shared/data/(快取資料庫目錄)
- shared/core/(建立 __init__.py、llm_client.py、cache_manager.py、glossary_manager.py、docx_writer.py)
- project_epub/input/、project_epub/output/ 與 project_epub/run_epub.py
- project_pdf/input/、project_pdf/output/ 與 project_pdf/run_pdf.py
- 根目錄下的 requirements.txt
- 建立原則:
- 請透過終端機指令(如 mkdir -p、touch 等)建立好所有資料夾與檔案。
- translation_cache.db 不需要手動建立空檔案,後續由 cache_manager.py 連線時自動生成即可。
- 完成後請列出目前目錄樹(tree 或 find)讓我確認。
連續選 1. Yes 確認後它就會將檔案架構建好, 並用 tree 指令顯示結果 :
✅ 所有目錄與檔案建立完畢!以下是確認的結構:
│
├───project_epub\
│ │ run_epub.py
│ ├───input\
│ └───output\
│
├───project_pdf\
│ │ run_pdf.py
│ ├───input\
│ └───output\
│
└───shared\
├───config\
│ glossary.json ← 已初始化為 {}
├───core\
│ __init__.py
│ cache_manager.py
│ docx_writer.py
│ glossary_manager.py
│ llm_client.py
└───data\ ← 快取資料庫目錄(translation_cache.db 將由程式自動生成)
(2). 安裝套件 & 實作程式模組 :
上面已建立了系統架構, 但檔案內容都是空的, 接下來要叫 AI 填寫檔案內容與實作翻譯模組程式內容, 請 Gemini 生成如下提示詞 :
請幫我完成專案的環境安裝與核心程式碼實作:
- 安裝相依套件:
在 requirements.txt 加入 google-genai、ebooklib、beautifulsoup4、python-docx,並在終端機執行安裝。 - 實作核心模組 (shared/core/):
- llm_client.py:使用 Google GenAI SDK 呼叫 Gemini Pro 模型(請預設台灣繁中與技術專業設定,支援指數退避重試)。
- cache_manager.py:使用 SQLite 維護 shared/data/translation_cache.db,以原文 MD5 為 key,支援中斷後接續翻譯。
- glossary_manager.py:讀取 shared/config/glossary.json,比對段落關鍵字並注入 Prompt。請順便在 glossary.json 預填幾個常見 Git 術語(如 repository: 儲存庫, commit: 提交, branch: 分支, staging area: 暫存區)。
- docx_writer.py:預設字型為『微軟正黑體』,支援標題層級、段落行距、表格排版,以及程式碼區塊(灰底 Consolas)。
- 實作 project_epub/run_epub.py:
- 支援讀取 project_epub/input/ 目錄下的 EPUB 檔案。
- 保留標題層級、正文、表格,特別注意:程式碼區塊(<pre> / <code>)請保持原文輸出不要翻譯。
- 逐章處理並透過快取儲存,最後產出 .docx 至 project_epub/output/。
完成後請回報。
同樣一路連續選 1. Yes 確認後就會逐一實作程式並驗證, 最後結果如下 :
這樣就完成整個翻譯工廠專案的實作了, 但在最後面有提醒在開始進行 epub 電子書翻譯前要先設定模型的 API Key :
執行翻譯前請先設定 API Key:
$env:GOOGLE_API_KEY = "你的金鑰"
python project_epub/run_epub.py
將 .epub 放入 即可開始翻譯。
API Key 通常是放在 .env 隱藏檔裡, 在此專案的 shared/core/llm_client.py 中可用 dotenv 模組的 load_dotenv() 載入, 上面實作好的程式與 requirements.txt 檔也需要修改, 可以用下列提示詞叫 AI 去修改 :
請在專案根目錄建立 .env 檔案(裡面預留 GEMINI_API_KEY=你的金鑰),並安裝 python-dotenv。同時在 shared/core/llm_client.py 開頭加入 load_dotenv(),讓程式啟動時會自動讀取 .env 裡面的 API Key。順便在 .gitignore 加上 .env 避免金鑰外洩。
一路連續選 1. Yes 確認讓 AI 去改, 完成後結果 :
檢查專案目錄的根目錄下果然多了一個 .env 檔, 開啟後將自己的 API key 填入存檔, 就可以開始進行電子書翻譯了.
2. 翻譯 epub 電子書 :
將前面下載的 progit.epub 電子書複製到 project_epub/input/ 資料夾下面, 然後用下列提示詞叫 AI 先翻譯前 1~2 章來測試效果 :
我已經將 progit.epub 放到 project_epub/input/ 目錄下了。請先幫我執行翻譯前 2 個章節作為測試,產出 Word 檔到 project_epub/output/,並在終端機隨時回報進度。
但跑著跑著卻碰到免費帳戶每分鐘至多 5 次呼叫的上限 (注意, API 呼叫與訂閱 Google AI Pro 方案是兩個不同的帳戶, API 呼叫需綁信用卡購買 Pay-as-you-go 額度), 用下列提示詞叫 Claude 修改程式 :
因為免費版 API 有每分鐘呼叫次數限制,請幫我在 llm_client.py 加入速率限制(Rate Limiter),每次呼叫間隔至少 30 秒,並在遇到 429 錯誤時自動等待 60 秒後重試,這樣我可以放著讓它免費跑完整本。
免費額度仍會因碰頂而收到 429 需等候 :
經過兩三次重跑, 終於完成前兩章的翻譯了 :
開啟 output 資料夾下的 progit_ch01-02_zh.docx, 開啟後檢視內容, 我覺得翻譯品質很不錯 :








.jpg)




























