Files
2025-10-15 23:46:54 +08:00

343 lines
9.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 文清楓 PDF 翻譯介面 🍃
一個基於 Next.js 15 和 AI 驅動的智慧 PDF 翻譯平台,採用文清楓風格設計,提供優雅的多語言翻譯體驗。
[![Next.js](https://img.shields.io/badge/Next.js-15.2.4-black?style=for-the-badge&logo=next.js)](https://nextjs.org/)
[![React](https://img.shields.io/badge/React-19.0.0-blue?style=for-the-badge&logo=react)](https://reactjs.org/)
[![TypeScript](https://img.shields.io/badge/TypeScript-5-blue?style=for-the-badge&logo=typescript)](https://www.typescriptlang.org/)
[![Tailwind CSS](https://img.shields.io/badge/Tailwind%20CSS-v4.1.9-38B2AC?style=for-the-badge&logo=tailwind-css)](https://tailwindcss.com/)
## ✨ 主要功能
- 🔄 **智慧 PDF 處理**: 多層文字擷取策略 (pdf-parse → pdf2json 備援)
- 🌐 **16 種語言支援**: 包含自動偵測和雙向翻譯
- 🎨 **文清楓風格**: 琥珀-綠-青漸變的自然優雅設計
- 📱 **完整響應式**: 手機/平板/桌面完美適配 (RWD)
- 🔊 **語音播放**: Web Speech API 多語音朗讀
- 💰 **費用追蹤**: 即時 Token 使用量與成本統計
- 📥 **拖拽上傳**: 便捷的檔案上傳體驗
- 📄 **智慧 PDF 生成**: 處理中文字元編碼問題
## 🚀 快速開始
### 環境需求
- Node.js 18.0.0 或更高版本
- npm 或 yarn 套件管理器
### 1. 克隆專案
```bash
git clone https://github.com/your-username/v0-pdf-translation-interface.git
cd v0-pdf-translation-interface
```
### 2. 安裝依賴
```bash
npm install
# 或者
yarn install
```
### 3. 建立環境變數檔案
在專案根目錄建立 `.env.local` 檔案:
```bash
# 複製環境變數範本
cp .env.example .env.local
```
`.env.local` 中設定以下環境變數:
```env
# ===========================================
# AI 服務提供者設定 (必填)
# ===========================================
# 選擇 AI 提供者: 'deepseek' 或 'openai'
AI_PROVIDER=deepseek
# ===========================================
# DeepSeek 設定 (推薦 - 成本較低)
# ===========================================
# 註冊網址: https://platform.deepseek.com/
DEEPSEEK_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
DEEPSEEK_BASE_URL=https://api.deepseek.com/v1
DEEPSEEK_MODEL=deepseek-chat
# ===========================================
# OpenAI 設定 (備選)
# ===========================================
# 註冊網址: https://platform.openai.com/
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
OPENAI_MODEL=gpt-4o-mini
# ===========================================
# 應用程式設定 (可選)
# ===========================================
# 檔案大小限制 (位元組)
MAX_FILE_SIZE=10485760
# 費用追蹤設定
ENABLE_COST_TRACKING=true
DEFAULT_CURRENCY=USD
# PDF 處理設定
PDF_PROCESSING_TIMEOUT=30000
OCR_LANGUAGE_DEFAULT=chi_tra+eng
# 開發環境設定
NODE_ENV=development
```
### 4. AI API 金鑰設定指南
#### 選項 A: DeepSeek (推薦 - 經濟實惠)
1. 前往 [DeepSeek Platform](https://platform.deepseek.com/)
2. 註冊並登入帳號
3. 前往 API Keys 頁面
4. 創建新的 API 金鑰
5. 複製金鑰到 `DEEPSEEK_API_KEY`
**優勢:**
- 💰 成本較低 (約為 OpenAI 的 1/10)
- 🇨🇳 對中文支援優秀
- ⚡ 回應速度快
#### 選項 B: OpenAI (備選)
1. 前往 [OpenAI Platform](https://platform.openai.com/)
2. 註冊並登入帳號
3. 前往 API Keys 頁面
4. 創建新的 API 金鑰
5. 複製金鑰到 `OPENAI_API_KEY`
**優勢:**
- 🌍 多語言品質穩定
- 🔬 先進的語言模型
- 📚 豐富的文檔支援
### 5. 啟動開發伺服器
```bash
npm run dev
# 或者
yarn dev
```
開啟瀏覽器訪問 [http://localhost:3000](http://localhost:3000)
## 📋 支援的語言
系統支援以下 16 種語言的雙向翻譯:
| 語言 | 代碼 | 語音支援 |
|------|------|----------|
| 自動偵測 | auto | - |
| 繁體中文 | zh-TW | ✅ |
| 簡體中文 | zh-CN | ✅ |
| English | en | ✅ |
| 日本語 | ja | ✅ |
| 한국어 | ko | ✅ |
| Español | es | ✅ |
| Français | fr | ✅ |
| Deutsch | de | ✅ |
| Italiano | it | ✅ |
| Português | pt | ✅ |
| Русский | ru | ✅ |
| العربية | ar | ✅ |
| हिन्दी | hi | ✅ |
| ไทย | th | ✅ |
| Tiếng Việt | vi | ✅ |
## 🛠️ 技術架構
### 前端技術
- **框架**: Next.js 15.2.4 (App Router)
- **UI 庫**: React 19.0.0
- **程式語言**: TypeScript 5
- **樣式系統**: Tailwind CSS v4.1.9
- **元件庫**: shadcn/ui + Radix UI
- **圖標**: Lucide React
- **語音合成**: Web Speech API
### 後端技術
- **執行環境**: Node.js
- **API 框架**: Next.js API Routes
- **PDF 處理**: pdf-parse, pdf2json (多層備援)
- **PDF 生成**: PDFKit + fontkit (Unicode 支援)
- **AI 整合**: Vercel AI SDK
- **AI 模型**: DeepSeek Chat / OpenAI GPT-4o-mini
### 部署平台
- **主要**: Vercel
- **替代**: Any Node.js hosting platform
## 📁 專案結構
```
├── app/ # Next.js 15 App Router
│ ├── api/ # API 路由
│ │ └── translate/ # 翻譯 API 端點
│ ├── globals.css # 全域樣式
│ ├── layout.tsx # 根佈局
│ └── page.tsx # 首頁
├── components/ # React 元件
│ ├── ui/ # 基礎 UI 元件 (shadcn/ui)
│ └── pdf-translator.tsx # 主要應用程式元件
├── lib/ # 工具函式與邏輯
│ ├── utils.ts # 通用工具函式
│ ├── pdf-processor.ts # PDF 處理核心邏輯
│ ├── pdf-to-image.ts # PDF 轉圖片功能
│ └── cost-tracker.ts # 費用追蹤系統
├── public/ # 靜態檔案
├── SDD.md # 軟體設計文件
├── TDD.md # 技術設計文件
└── README.md # 專案說明文件
```
## 🎨 文清楓設計特色
### 色彩系統
- **主色調**: 琥珀(amber) → 綠(green) → 青(teal) 漸變
- **背景**: 自然溫暖色調,半透明層次
- **裝飾**: 毛玻璃效果與浮動圓圈元素
### 響應式設計
- **桌面版** (xl): 雙欄佈局,寬敞間距
- **平板版** (lg): 單欄佈局,適中間距
- **手機版** (sm): 縱向堆疊,緊湊佈局
## 💰 費用說明
### DeepSeek 費用 (推薦)
- **輸入**: $0.00014 / 1K tokens
- **輸出**: $0.00028 / 1K tokens
- **平均翻譯成本**: $0.002 - $0.01 per page
### OpenAI 費用
- **GPT-4o-mini 輸入**: $0.00015 / 1K tokens
- **GPT-4o-mini 輸出**: $0.0006 / 1K tokens
- **平均翻譯成本**: $0.01 - $0.05 per page
*系統會即時追蹤並顯示每次翻譯的 Token 使用量與費用*
## 🔧 開發指令
```bash
# 開發模式
npm run dev
# 建置專案
npm run build
# 啟動生產版本
npm start
# 程式碼檢查
npm run lint
# 型別檢查
npm run type-check
```
## 📋 功能使用指南
### 1. 基本翻譯流程
1. 📁 上傳 PDF 檔案 (支援拖拽)
2. 🌐 選擇來源語言 (可設為自動偵測)
3. 🎯 選擇目標語言
4. ⚙️ 選擇是否生成翻譯後的 PDF
5. ▶️ 點擊「開始翻譯」
6. 📄 查看翻譯結果與費用統計
### 2. 語音播放功能
1. 🔊 翻譯完成後,點擊語音播放區域
2. 🎤 選擇適合的語音 (系統自動推薦)
3. ⚡ 調整播放速度 (0.5x - 2.0x)
4. ▶️ 播放 / ⏸️ 暫停 / ⏹️ 停止控制
### 3. 檔案下載
- 📄 **文字檔**: 下載純文字版翻譯結果 (.txt)
- 📋 **PDF 檔**: 下載翻譯後的 PDF 檔案
### 4. 費用追蹤
- 💰 查看單次翻譯的 Token 使用量與費用
- 📊 查看累積使用統計
- 🔄 重置費用記錄 (本地儲存)
## ⚠️ 注意事項
### 檔案限制
- **檔案類型**: 僅支援 PDF 格式
- **檔案大小**: 最大 10MB
- **內容要求**: 需含有可提取的文字內容
### PDF 處理說明
- **文字型 PDF**: 直接提取文字,處理速度快
- **掃描型 PDF**: 需要 OCR 識別,處理時間較長
- **加密 PDF**: 目前不支援,請先解除保護
### 中文 PDF 輸出
由於 PDF 字體編碼限制,中文內容會:
- 🔤 在 PDF 中顯示為英文描述
- 📄 完整中文翻譯可下載文字檔案
- 💡 PDF 檔案會包含重要提示說明
## 🐛 疑難排解
### 常見問題
**Q: 翻譯按鈕無法點擊?**
A: 請確認已上傳 PDF 檔案且選擇了目標語言
**Q: PDF 顯示「無法讀取內容」?**
A: 可能是掃描版 PDF 或加密檔案,請嘗試其他 PDF 檔案
**Q: API 金鑰錯誤?**
A: 請檢查 `.env.local` 檔案中的 API 金鑰是否正確設定
**Q: 語音播放沒有聲音?**
A: 請檢查瀏覽器是否支援語音合成,並確認音量設定
**Q: 費用統計顯示異常?**
A: 費用資料儲存在瀏覽器本地,清除瀏覽器資料會重置記錄
### 技術支援
如果遇到問題,請:
1. 查看瀏覽器開發者工具的 Console 錯誤訊息
2. 確認網路連線狀況
3. 檢查 API 金鑰額度
4. 提交 Issue 到 GitHub Repository
## 📄 文檔
- 📋 [軟體設計文件 (SDD)](./SDD.md)
- 🔧 [技術設計文件 (TDD)](./TDD.md)
## 🤝 貢獻指南
歡迎提交 Pull Request 或 Issue
1. Fork 這個專案
2. 創建功能分支 (`git checkout -b feature/amazing-feature`)
3. 提交變更 (`git commit -m 'Add some amazing feature'`)
4. 推送到分支 (`git push origin feature/amazing-feature`)
5. 開啟 Pull Request
## 📄 授權
本專案採用 MIT 授權 - 詳見 [LICENSE](LICENSE) 檔案
## 🙏 致謝
- [Next.js](https://nextjs.org/) - React 框架
- [Tailwind CSS](https://tailwindcss.com/) - CSS 框架
- [shadcn/ui](https://ui.shadcn.com/) - UI 元件庫
- [Vercel AI SDK](https://sdk.vercel.ai/) - AI 整合
- [DeepSeek](https://platform.deepseek.com/) - AI 模型服務