diff --git a/README.md b/README.md
index 7a9608b..f058bff 100644
--- a/README.md
+++ b/README.md
@@ -155,6 +155,7 @@ BentoPDF is available in multiple languages:
|----------|--------|
| English | [](public/locales/en/common.json) |
| German | [](public/locales/de/common.json) |
+| Vietnamese | [](public/locales/vi/common.json) |
Want to help translate BentoPDF into your language? Check out our [Translation Guide](TRANSLATION.md)!
diff --git a/TRANSLATION.md b/TRANSLATION.md
index f3f3d3b..00354a5 100644
--- a/TRANSLATION.md
+++ b/TRANSLATION.md
@@ -21,10 +21,12 @@ BentoPDF uses **i18next** for internationalization (i18n). Currently supported l
- **English** (`en`) - Default
- **German** (`de`)
+- **Vietnamese** (`vi`)
The app automatically detects the language from the URL path:
- `/en/` → English
- `/de/` → German
+- `/vi/` → Vietnamese
---
@@ -262,6 +264,7 @@ In `common.json`:
2. **Visit each language:**
- English: `http://localhost:5173/en/`
- German: `http://localhost:5173/de/`
+ - Vietnamese: `http://localhost:5173/vi/`
- Your new language: `http://localhost:5173/fr/`
3. **Check these pages:**
@@ -471,6 +474,7 @@ Current translation coverage:
|----------|------|--------|------------|
| English | `en` | ✅ Complete | Core team |
| German | `de` | 🚧 In Progress | Core team |
+| Vietnamese | `vi` | ✅ Complete | Community |
| Your Language | `??` | 🚧 In Progress | You? |
---
diff --git a/about.html b/about.html
index a2a68a1..7366aad 100644
--- a/about.html
+++ b/about.html
@@ -11,6 +11,7 @@
+
diff --git a/contact.html b/contact.html
index aed10a1..fe9c432 100644
--- a/contact.html
+++ b/contact.html
@@ -11,6 +11,7 @@
+
diff --git a/index.html b/index.html
index b549ea7..c2f8211 100644
--- a/index.html
+++ b/index.html
@@ -9,6 +9,7 @@
+
@@ -207,7 +208,7 @@
- Why BentoPDF?
@@ -494,7 +495,7 @@
- Your data never leaves your device
+
We keep
diff --git a/licensing.html b/licensing.html
index 2dad8eb..5f4c176 100644
--- a/licensing.html
+++ b/licensing.html
@@ -11,6 +11,7 @@
+
diff --git a/package-lock.json b/package-lock.json
index 6034b9f..301df3e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "bento-pdf",
- "version": "1.10.5",
+ "version": "1.11.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "bento-pdf",
- "version": "1.10.5",
+ "version": "1.11.1",
"license": "Apache-2.0",
"dependencies": {
"@fontsource/cedarville-cursive": "^5.2.7",
diff --git a/public/locales/de/common.json b/public/locales/de/common.json
index cf78551..092348e 100644
--- a/public/locales/de/common.json
+++ b/public/locales/de/common.json
@@ -22,7 +22,7 @@
},
"features": {
"title": "Warum",
- "bentoPdf": "BentoPDF?",
+ "bentoPdf": "BentoPDF wählen?",
"noSignup": {
"title": "Keine Anmeldung",
"description": "Sofort starten, keine Konten oder E-Mails erforderlich."
diff --git a/public/locales/en/common.json b/public/locales/en/common.json
index 6ea63e2..9a89952 100644
--- a/public/locales/en/common.json
+++ b/public/locales/en/common.json
@@ -21,7 +21,7 @@
"title": "Used by companies and people working at"
},
"features": {
- "title": "Why",
+ "title": "Why choose",
"bentoPdf": "BentoPDF?",
"noSignup": {
"title": "No Signup",
diff --git a/public/locales/vi/common.json b/public/locales/vi/common.json
new file mode 100644
index 0000000..0819cbe
--- /dev/null
+++ b/public/locales/vi/common.json
@@ -0,0 +1,276 @@
+{
+ "nav": {
+ "home": "Trang chủ",
+ "about": "Giới thiệu",
+ "contact": "Liên hệ",
+ "licensing": "Giấy phép",
+ "allTools": "Tất cả công cụ",
+ "openMainMenu": "Mở menu chính",
+ "language": "Ngôn ngữ"
+ },
+ "hero": {
+ "title": "Bộ công cụ",
+ "pdfToolkit": "PDF",
+ "builtForPrivacy": "an toàn và riêng tư",
+ "noSignups": "Không cần đăng ký",
+ "unlimitedUse": "Sử dụng không giới hạn",
+ "worksOffline": "Hoạt động offline",
+ "startUsing": "Bắt đầu sử dụng ngay"
+ },
+ "usedBy": {
+ "title": "Được sử dụng bởi các công ty và những người làm việc tại"
+ },
+ "features": {
+ "title": "Tại sao chọn",
+ "bentoPdf": "BentoPDF?",
+ "noSignup": {
+ "title": "Không cần đăng ký",
+ "description": "Bắt đầu ngay lập tức, không cần tài khoản hay email."
+ },
+ "noUploads": {
+ "title": "Không tải lên",
+ "description": "100% xử lý phía máy khách, tệp của bạn không bao giờ rời khỏi thiết bị."
+ },
+ "foreverFree": {
+ "title": "Miễn phí mãi mãi",
+ "description": "Tất cả công cụ, không dùng thử, không có tường phí."
+ },
+ "noLimits": {
+ "title": "Không giới hạn",
+ "description": "Sử dụng bao nhiêu tùy thích, không có giới hạn ẩn."
+ },
+ "batchProcessing": {
+ "title": "Xử lý hàng loạt",
+ "description": "Xử lý không giới hạn PDF trong một lần."
+ },
+ "lightningFast": {
+ "title": "Cực kỳ nhanh",
+ "description": "Xử lý PDF ngay lập tức, không cần chờ đợi hay trì hoãn."
+ }
+ },
+ "tools": {
+ "title": "Bắt đầu với",
+ "toolsLabel": "Công cụ",
+ "subtitle": "Nhấp vào một công cụ để mở trình tải tệp lên",
+ "searchPlaceholder": "Tìm kiếm công cụ (ví dụ: 'chia', 'sắp xếp'...)",
+ "backToTools": "Quay lại Công cụ"
+ },
+ "upload": {
+ "clickToSelect": "Nhấp để chọn tệp",
+ "orDragAndDrop": "hoặc kéo và thả",
+ "pdfOrImages": "PDF hoặc Hình ảnh",
+ "filesNeverLeave": "Tệp của bạn không bao giờ rời khỏi thiết bị.",
+ "addMore": "Thêm tệp",
+ "clearAll": "Xóa tất cả"
+ },
+ "loader": {
+ "processing": "Đang xử lý..."
+ },
+ "alert": {
+ "title": "Thông báo",
+ "ok": "OK"
+ },
+ "preview": {
+ "title": "Xem trước tài liệu",
+ "downloadAsPdf": "Tải xuống dưới dạng PDF",
+ "close": "Đóng"
+ },
+ "settings": {
+ "title": "Cài đặt",
+ "shortcuts": "Phím tắt",
+ "preferences": "Tùy chọn",
+ "displayPreferences": "Tùy chọn hiển thị",
+ "searchShortcuts": "Tìm kiếm phím tắt...",
+ "shortcutsInfo": "Nhấn và giữ phím để đặt phím tắt. Thay đổi được lưu tự động.",
+ "shortcutsWarning": "⚠️ Tránh các phím tắt trình duyệt phổ biến (Cmd/Ctrl+W, Cmd/Ctrl+T, Cmd/Ctrl+N, v.v.) vì chúng có thể không hoạt động đáng tin cậy.",
+ "import": "Nhập",
+ "export": "Xuất",
+ "resetToDefaults": "Đặt lại về mặc định",
+ "fullWidthMode": "Chế độ toàn chiều rộng",
+ "fullWidthDescription": "Sử dụng toàn bộ chiều rộng màn hình cho tất cả công cụ thay vì container căn giữa",
+ "settingsAutoSaved": "Cài đặt được lưu tự động",
+ "clickToSet": "Nhấp để đặt",
+ "pressKeys": "Nhấn phím...",
+ "warnings": {
+ "alreadyInUse": "Phím tắt đã được sử dụng",
+ "assignedTo": "đã được gán cho:",
+ "chooseDifferent": "Vui lòng chọn một phím tắt khác.",
+ "reserved": "Cảnh báo phím tắt dành riêng",
+ "commonlyUsed": "thường được sử dụng cho:",
+ "unreliable": "Phím tắt này có thể không hoạt động đáng tin cậy hoặc có thể xung đột với hành vi trình duyệt/hệ thống.",
+ "useAnyway": "Bạn có muốn sử dụng nó không?",
+ "resetTitle": "Đặt lại phím tắt",
+ "resetMessage": "Bạn có chắc chắn muốn đặt lại tất cả phím tắt về mặc định?