VI-Translate README

The project's README from github.com/breslee1707/VI-Translate. As one markdown file: README.md.

PDF Translate logo

PDF Translate

Dịch tài liệu PDF sang tiếng Việt và 35 ngôn ngữ khác
mà vẫn giữ nguyên bố cục, công thức, bảng và hình ảnh.

Xây dựng và duy trì bởi Lê Ngọc Gia Huy · huyg.ai

Tải PDF Translate cho Windows Tải PDF Translate cho Mac Apple Silicon Tải PDF Translate cho Mac Intel

Bản phát hành mới nhất Tổng lượt tải Giấy phép AGPL-3.0 Không cần cài Python

Điểm nổi bật · Cài đặt · Cách dùng · Phát triển · Agent Skill · Giới hạn


PDF Translate là ứng dụng mã nguồn mở dành cho Windows, macOS và Android. Công cụ phân tích bố cục từng trang, bảo vệ công thức và code, dịch phần văn xuôi rồi đặt nội dung trở lại đúng vị trí trong tài liệu gốc — không biến PDF của bạn thành một trang chữ trắng đơn giản.

Đây không phải bản dịch giao diện của một công cụ có sẵn. Dự án mượn ý tưởng và phần nhân đọc/ghi PDF từ hai dự án mã nguồn mở, rồi tự xây phần quyết định chất lượng đầu ra: ứng dụng desktop, bộ quy tắc bảo toàn bố cục, lớp xử lý tiếng Việt và hàng loạt bản sửa lỗi ngay trong nhân. Chi tiết ở mục Được phát triển ở đây.

Điểm nổi bật

Bắt đầu trong 1 phút

Windows

  1. Tải PDF Translate cho Windows (.zip, khoảng 336 MB; đã gồm model OCR chạy cục bộ, không cần mạng).
  2. Giải nén toàn bộ file vừa tải.
  3. Mở PDFTranslate.exe.

macOS

  1. Tải bản phù hợp: Apple Silicon cho Mac M1/M2/M3/M4/M5 hoặc Intel cho Mac Intel.
  2. Mở file .dmg, kéo PDF Translate vào thư mục Applications.
  3. Trong lần chạy đầu, bấm chuột phải vào ứng dụng → Open → Open.

Android

  1. Tải APK từ bản phát hành Android mới nhất (PDFTranslate-android-*.apk). Bản Android được đánh tag riêng theo dạng android-v*.
  2. Trên điện thoại, cho phép trình duyệt hoặc trình quản lý file cài ứng dụng từ nguồn không xác định, rồi mở file APK.
  3. Ứng dụng cần Android 8.0 trở lên.

Muốn tự biên dịch:

cd android
./gradlew assembleDebug

[!NOTE] Bản macOS yêu cầu macOS 14 Sonoma trở lên. Tất cả bản desktop đều không cần cài Python và không phải tải thêm model ở lần chạy đầu. Quá trình dịch bằng Google vẫn cần kết nối Internet.

[!IMPORTANT] Bản Android là một bản viết lại trên PDFBox-Android, không phải bản desktop biên dịch lại. Nó chỉ đọc PDF dạng văn bản (chưa có OCR) và dùng heuristic thay cho model bố cục BabelDOC/YOLOv8, nên PDF nhiều công thức có thể còn sai chỉ số trên/dưới hoặc phân số. Chi tiết build và phát hành nằm ở docs/android-release.md.

[!WARNING] Windows SmartScreen có thể cảnh báo vì ứng dụng chưa được ký số. Chọn More info → Run anyway nếu bạn tải file từ trang Releases chính thức của repo này.

[!WARNING] Nếu máy bạn bật Smart App Control (mặc định trên các máy Windows 11 cài mới), ứng dụng sẽ bị chặn hẳn với thông báo "An Application Control policy has blocked this file" — không có nút Run anyway. Kiểm tra tại Windows Security → App & browser control → Smart App Control. Đây là hệ quả của việc ứng dụng chưa có chữ ký số, không phải lỗi của ứng dụng. Microsoft chỉ cho bật lại Smart App Control bằng cách cài lại Windows, nên hãy cân nhắc kỹ trước khi tắt nó; giải pháp đúng là ký số ứng dụng, và việc đó đang được xử lý.

[!WARNING] Bản macOS hiện dùng chữ ký ad-hoc, chưa được Apple notarize. Gatekeeper có thể chặn thao tác mở thông thường; hãy dùng cách bấm chuột phải → Open ở trên nếu bạn tải từ trang Releases chính thức.

Bạn cũng có thể mở trang Releases để xem ghi chú thay đổi và các tệp của phiên bản mới nhất.

Ứng dụng cũng tự kiểm tra phiên bản mới mỗi lần mở. Máy không có mạng thì bỏ qua, không báo lỗi.

Trên Windows, bản mới được tải ngầm ngay trong lúc bạn vẫn dịch bình thường; góc trên bên phải hiện ↓ Đang tải vX.Y.Z, tải xong đổi thành ● Cài vX.Y.Z & khởi động lại. Bấm vào đó, ứng dụng đóng lại, thay thư mục cài đặt rồi tự mở lại — khoảng mười giây, không phải giải nén gì. Đang dịch dở thì nút chờ đến khi xong. Tải xong mà bạn tắt ứng dụng luôn cũng không mất: lần mở sau vẫn là nút khởi động lại, không tải lại từ đầu. Nếu bước thay thư mục hỏng giữa chừng, bản cũ được đưa lại nguyên vẹn và bạn tải thủ công như trước.

Trên macOS, và khi ứng dụng nằm ở thư mục không có quyền ghi, dòng đó vẫn là ● Có bản mới vX.Y.Z và bấm vào sẽ mở trang tải.

Cách sử dụng

1. Thêm tài liệu

Chọn một trong ba cách:

2. Chọn ngôn ngữ

Chọn ngôn ngữ đích trong mục Dịch sang. Ứng dụng mặc định dịch sang Tiếng Việt.

Với PDF scan, giữ Trang ảnh scan → Tự động (khuyên dùng). Chế độ Nâng cao chậm hơn đáng kể và chủ yếu dùng để thử nghiệm; Tắt OCR nếu bạn chỉ muốn xử lý lớp chữ có sẵn. Một trang có bảng, công thức, hình hoặc nhận dạng không chắc chắn sẽ được giữ nguyên và hàng đợi báo dịch một phần.

3. Bắt đầu dịch

Bấm Dịch. Các file được xử lý lần lượt và hiển thị trạng thái ngay trong hàng đợi.

Kết quả được lưu tự động vào thư mục translated nằm cạnh file nguồn:

TaiLieu/
├── document.pdf
└── translated/
    └── document-vi.pdf

Mặc định, ứng dụng không ghi đè kết quả đã có. Bật Ghi đè file đã dịch trước đó khi bạn muốn dịch lại.

Được phát triển ở đây

Phần kế thừa từ dự án gốc là nhân đọc, phân tích bố cục và render PDF. Mọi thứ quyết định việc một trang tiếng Việt in ra có đọc được hay không đều được viết cho dự án này:

Ứng dụng desktop — 1.620 dòng trong app/ Giao diện, kéo thả, hàng đợi nhiều file không dừng vì một file lỗi, mã lỗi đọc được kèm log để người dùng báo lỗi được, cơ chế tự cập nhật tự thay thư mục cài đặt rồi mở lại app, đóng gói PyInstaller cho Windows và cả hai kiến trúc macOS, workflow phát hành tự động. Không một dòng nào trong thư mục này đến từ dự án gốc.

Bộ quy tắc bảo toàn — pdf2zh/rules.py (519 dòng) và contract sản phẩm Đây là thứ phân biệt dự án với một công cụ dịch PDF thông thường: nhận diện vùng công thức và ký hiệu kỹ thuật để không dịch nhầm thành văn xuôi, giữ in đậm và in nghiêng qua vòng dịch, dựng lại chữ xoay 90 độ đúng chiều thay vì bẻ ngang, giữ bullet Wingdings/Symbol mà font Unicode không có glyph, tính chiều cao dòng tối thiểu cho chữ tiếng Việt nhiều dấu chồng.

Những lỗi tự tìm và tự sửa trong nhân Mỗi lỗi dưới đây được phát hiện từ tài liệu thật, truy ra nguyên nhân trong nhân và sửa tại đây:

Bảng nguyên nhân đầy đủ: agent-knowledge/regressions.md.

278 test hồi quy — 3.422 dòng trong tests/ Mỗi lỗi đã sửa đều bị khoá lại bằng một test dựng đúng hình học nhỏ nhất gây ra nó, nên bản sửa không âm thầm mất đi ở lần thay đổi sau.

Chế độ Handoff và Agent Skill Một engine dịch thứ hai đưa các đoạn văn sang JSONL cho AI agent dịch theo ngữ cảnh chuyên ngành rồi dựng lại PDF, cùng chuẩn SKILL.md để gọi trực tiếp trong Codex, Claude Code hay Copilot.

Ngôn ngữ hỗ trợ

Ứng dụng hỗ trợ 36 ngôn ngữ sử dụng chữ Latin, gồm tiếng Việt, Anh, Pháp, Đức, Tây Ban Nha, Bồ Đào Nha, Ý, Indonesia, Hà Lan, Ba Lan, Thổ Nhĩ Kỳ và nhiều ngôn ngữ châu Âu khác.

Các hệ chữ sau chưa được hỗ trợ: Trung, Nhật, Hàn, Ả Rập, Do Thái, Thái và các chữ Ấn Độ. Ứng dụng sẽ báo lỗi thay vì tạo PDF chứa ký tự ô vuông do thiếu glyph.

Dùng như Agent Skill

Repo đồng thời tuân theo chuẩn Agent Skills và có thể dùng với Codex, Claude Code, GitHub Copilot cùng các coding agent hỗ trợ SKILL.md.

Cài skill cho tất cả agent có trên máy:

npx skills add breslee1707/VI-Translate -g --all

Sau đó gọi skill bằng yêu cầu tự nhiên:

Use $pdf-translate to translate this PDF into Vietnamese.

Trong Claude Code hoặc Copilot CLI:

/pdf-translate translate this PDF into Vietnamese.

Skill cung cấp hai chế độ dịch:

Chế độ Bộ máy dịch Phù hợp khi
Google translate.google.com Cần nhanh, miễn phí và không có API key
Handoff AI agent trong phiên làm việc Tài liệu chuyên ngành cần bản dịch theo ngữ cảnh

Google là chế độ mặc định và là chế độ được dùng trong app desktop. Handoff trích các đoạn văn sang JSONL để agent dịch, sau đó dựng lại PDF; dữ liệu không được gửi tới Google nhưng sẽ tốn token và mất nhiều thời gian hơn.

Ví dụ với từ conduction trong tài liệu truyền nhiệt:

Google Handoff
“Sự dẫn điện xảy ra khi hai vật tiếp xúc trực tiếp” “Dẫn nhiệt xảy ra khi hai vật thể tiếp xúc trực tiếp với nhau”

Xem quy trình đầy đủ tại SKILL.md.

Chạy từ mã nguồn

Chuẩn bị môi trường

git clone https://github.com/breslee1707/VI-Translate.git
cd VI-Translate
python -m venv .venv
.venv\Scripts\python.exe -m pip install -r requirements.txt

Dịch bằng Google

.venv\Scripts\python.exe scripts\translate_pdf.py INPUT.pdf --output-dir OUT

Dịch bằng Handoff

# 1. Trích các đoạn cần dịch
.venv\Scripts\python.exe scripts\translate_pdf.py INPUT.pdf --engine handoff --emit-segments segments.jsonl

# 2. Dùng agent dịch segments.jsonl thành translations.jsonl

# 3. Dựng lại PDF
.venv\Scripts\python.exe scripts\translate_pdf.py INPUT.pdf --engine handoff --segments translations.jsonl --output-dir OUT

Build ứng dụng Windows

.\build.ps1

Gói phát hành được tạo tại dist\PDFTranslate-windows.zip.

Build ứng dụng macOS

Chạy trên máy Mac dùng đúng kiến trúc cần phát hành:

bash build-macos.sh

Gói phát hành được tạo tại dist/PDFTranslate-macos-apple-silicon.dmg hoặc dist/PDFTranslate-macos-intel.dmg. Từ máy Windows, bạn có thể chạy thủ công workflow Release trên GitHub Actions để lấy cả hai DMG trong phần Artifacts; khi push tag v*, workflow tự đính kèm chúng vào GitHub Release.

Giới hạn hiện tại

Nên kiểm tra lại tài liệu đầu ra trước khi dùng cho xuất bản hoặc các mục đích yêu cầu độ chính xác cao.

Giấy phép và ghi công

PDF Translate được phát hành theo giấy phép AGPL-3.0. Nếu phát hành lại ứng dụng hoặc cung cấp nó như một dịch vụ qua mạng, bạn phải kèm theo mã nguồn tương ứng theo điều khoản của giấy phép.

Thư mục pdf2zh/ là bản fork của nhân xử lý PDF từ PDFMathTranslate 1.9.11, dùng model bố cục và font đã ghim của BabelDOC. Hai dự án đó cho công việc này một điểm khởi đầu và được ghi công đầy đủ tại THIRD_PARTY_NOTICES.md.

Ứng dụng desktop, bộ quy tắc bảo toàn, các bản sửa lỗi trong nhân, bộ test hồi quy, chế độ Handoff và toàn bộ phần đóng gói — mọi thứ liệt kê ở Được phát triển ở đây — do Lê Ngọc Gia Huy (@huyg.ai trên TikTok) phát triển và duy trì.


Nếu PDF Translate hữu ích với bạn, hãy tặng repo một ⭐ để nhiều người biết đến dự án hơn.

Xây dựng & duy trì bởi Lê Ngọc Gia Huy (huyg.ai)

VI-Translate (breslee1707/VI-Translate)

Searching Database…

What is this?PDF Translate is an open-source desktop and Android app that translates PDF documents into Vietnamese and 35 other Latin-script languages while keeping the original layout, formulas, tables, and images intact.
How do I get it running on Windows, macOS, or Android?On Windows, download the ~336MB zip (it already bundles the local OCR model), unzip, and open PDFTranslate.exe. On macOS, grab the Apple Silicon or Intel .dmg, drag it into Applications, then right-click → Open on first launch. For Android, install the APK from the latest android-v* release and allow installs from unknown sources.
Do I need an internet connection or an API key to translate?No API key is needed for the default Google translation mode, but it does require an internet connection; local OCR for scanned pages works offline. An optional Handoff mode instead routes text to an AI agent (Codex, Claude Code, Copilot) for context-aware translation.
What won't it translate properly?Pages with tables, complex formulas, code, or uncertain reading order are left as-is and flagged as 'partial translation' to protect layout. Each paragraph sent to Google is capped at 5,000 characters past which text is skipped, and the Android build has no OCR and uses heuristics instead of the BabelDOC/YOLOv8 layout model.
What does the AGPL-3.0 license require if I redistribute it?If you redistribute the app or offer it as a networked service, you must make the corresponding source code available under the same AGPL-3.0 terms.
What languages can it translate into?It supports 36 Latin-script languages, defaulting to Vietnamese plus English, French, German, Spanish, Portuguese, Italian, Indonesian, Dutch, Polish, Turkish and more. CJK, Arabic, Hebrew, Thai and Indic scripts aren't supported, and the app errors out rather than producing garbled text.
What's the difference between Google and Handoff translation modes?Google mode uses translate.google.com for fast, free translation with no API key, and is the default used by the desktop app. Handoff mode exports paragraphs to JSONL for an AI coding agent to translate with domain context, then rebuilds the PDF — slower and token-costly but better for specialized documents.
Why isn't this just a repackaged version of an existing PDF translator?The project forked the PDF read/layout core from PDFMathTranslate and BabelDOC, but wrote its own desktop app, a 519-line layout-preservation rule engine, Vietnamese diacritic handling, and fixed core bugs like glyph remapping corruption and page-flip matrix errors, all backed by 278 regression tests.
Does the Windows app update itself automatically?Yes — it downloads new versions in the background while you keep translating, then shows an 'Install & restart' button that swaps the install folder in about ten seconds. On macOS it only prompts you to open the download page.
Size
2.2 MB
Stars
704
Age
1mo
Commits · 90 Days