10 KiB
10 KiB
Document Translation API - Architecture Overview
System Architecture
┌─────────────────────────────────────────────────────────────┐
│ FastAPI Application │
│ (main.py) │
└─────────────────────┬───────────────────────────────────────┘
│
├──> File Upload Endpoint (/translate)
│ ├─> File Validation
│ ├─> File Type Detection
│ └─> Route to Appropriate Translator
│
├──> Batch Translation (/translate-batch)
│
└──> Utility Endpoints
├─> /health
├─> /languages
└─> /download/{filename}
┌─────────────────────────────────────────────────────────────┐
│ Translation Layer │
└─────────────────────┬───────────────────────────────────────┘
│
┌─────────────┼─────────────┐
│ │ │
▼ ▼ ▼
Excel Word PowerPoint
Translator Translator Translator
(.xlsx) (.docx) (.pptx)
│ │ │
└─────────────┼─────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Translation Service Abstraction │
│ (Pluggable Backend) │
└─────────────────────┬───────────────────────────────────────┘
│
┌─────────────┼─────────────┐
▼ ▼ ▼
Google DeepL LibreTranslate
Translate (API Key) (Self-hosted)
Component Breakdown
1. API Layer (main.py)
- FastAPI Application: RESTful API endpoints
- File Upload Handling: Multipart form data processing
- Request Validation: Pydantic models for type safety
- Error Handling: Custom exception handlers
- CORS Configuration: Cross-origin resource sharing
2. Translation Coordinators
Excel Translator (translators/excel_translator.py)
Input: .xlsx file
Process:
1. Load workbook with openpyxl (preserve VBA, formulas)
2. Iterate through all worksheets
3. For each cell:
- Detect type (text, formula, number)
- If text: translate
- If formula: extract and translate strings
- Preserve: formatting, colors, borders, merges
4. Translate sheet names
5. Maintain image positions
Output: Translated .xlsx with identical structure
Word Translator (translators/word_translator.py)
Input: .docx file
Process:
1. Load document with python-docx
2. Traverse document tree:
- Paragraphs → Runs (preserve formatting per run)
- Tables → Cells → Paragraphs
- Headers/Footers (all section types)
3. Translate text while preserving:
- Font family, size, color
- Bold, italic, underline
- Lists (numbered/bulleted)
- Styles (Heading 1, Normal, etc.)
4. Images remain embedded via relationships
Output: Translated .docx with preserved layout
PowerPoint Translator (translators/pptx_translator.py)
Input: .pptx file
Process:
1. Load presentation with python-pptx
2. For each slide:
- Shapes → Text Frames → Paragraphs → Runs
- Tables → Cells → Text Frames
- Groups → Nested Shapes
- Speaker Notes
3. Preserve:
- Slide layouts
- Animations (timing, effects)
- Transitions
- Image positions and layering
- Shape properties (size, position, rotation)
Output: Translated .pptx with identical design
3. Translation Service Layer
Abstract Interface: TranslationProvider
- Allows swapping translation backends without changing translators
- Configurable via environment variables
Implementations:
-
Google Translator (Default, Free)
- Uses deep-translator library
- No API key required
- Rate limited
-
DeepL (Premium, API Key Required)
- Higher quality translations
- Better context understanding
- Requires paid API key
-
LibreTranslate (Self-hosted)
- Open-source alternative
- Full control and privacy
- Requires local installation
4. Utility Layer
File Handler (utils/file_handler.py)
- File validation (size, type)
- Unique filename generation (UUID-based)
- Safe file operations
- Cleanup management
Exception Handling (utils/exceptions.py)
- Custom exception types
- HTTP status code mapping
- User-friendly error messages
5. Configuration (config.py)
- Environment variable loading
- Directory management
- Service configuration
- Validation rules
Data Flow
Single Document Translation
1. Client uploads file via POST /translate
└─> File + target_language + source_language
2. API validates request
├─> Check file extension
├─> Verify file size
└─> Validate language codes
3. Save to temporary storage
└─> uploads/{unique_id}_{filename}
4. Route to appropriate translator
├─> .xlsx → ExcelTranslator
├─> .docx → WordTranslator
└─> .pptx → PowerPointTranslator
5. Translator processes document
├─> Parse structure
├─> Extract text elements
├─> Call translation service for each text
├─> Apply translations while preserving formatting
└─> Save to outputs/{unique_id}_translated_{filename}
6. Return translated file
└─> FileResponse with download headers
7. Cleanup (optional)
└─> Delete uploaded file
Formatting Preservation Strategies
Excel
- Cell Properties: Copied before translation
- Merged Cells: Detected via
cell.merge_cells - Formulas: Regex parsing to extract strings
- Images: Anchored to cells, preserved via relationships
- Charts: Remain linked to data ranges
Word
- Run-level Translation: Preserves inline formatting
- Style Inheritance: Paragraph styles maintained
- Tables: Structure preserved, cells translated individually
- Images: Embedded via relationships, not modified
- Headers/Footers: Treated as separate sections
PowerPoint
- Shape Hierarchy: Recursive traversal
- Text Frames: Paragraph and run-level translation
- Layouts: Template references preserved
- Animations: Stored separately, not affected
- Media: File references remain intact
Scalability Considerations
Horizontal Scaling
- Stateless design (no session storage)
- Files stored on disk (can move to S3/Azure Blob)
- Load balancer compatible
Performance Optimization
- Async I/O: FastAPI's async capabilities
- Batch Processing: Multiple files in parallel
- Caching: Translation cache for repeated text
- Streaming: Large file chunking (future enhancement)
Resource Management
- File Cleanup: Automatic deletion after translation
- Size Limits: Configurable max file size
- Rate Limiting: Prevent API abuse
- Queue System: Redis-based job queue (future)
Future MCP Integration
MCP Server Wrapper
The API is designed to be wrapped as an MCP server:
# MCP Tools
1. translate_document(file_path, target_lang) → translated_file
2. get_supported_languages() → language_list
3. check_api_health() → status
# Benefits
- AI assistants can translate documents seamlessly
- Integration with Claude, GPT, and other LLMs
- Workflow automation in AI pipelines
Security Architecture
Input Validation
- File type whitelist
- Size restrictions
- Extension verification
- Content-type checking
File Isolation
- Unique filenames (UUID)
- Temporary storage
- Automatic cleanup
- No path traversal
API Security (Production)
- Rate limiting (not yet implemented)
- Authentication/Authorization (future)
- HTTPS/TLS encryption (deployment config)
- Input sanitization
Deployment Architecture
Development
Local Machine
├─> Python 3.11+
├─> Virtual Environment
├─> SQLite (if needed for tracking)
└─> Local file storage
Production (Recommended)
Cloud Platform (AWS/Azure/GCP)
├─> Container (Docker)
├─> Load Balancer
├─> Multiple API Instances
├─> Object Storage (S3/Blob)
├─> Redis (caching/queue)
├─> Monitoring (Prometheus/Grafana)
└─> Logging (ELK Stack)
Technology Stack
| Layer | Technology | Purpose |
|---|---|---|
| API Framework | FastAPI | High-performance async API |
| Excel Processing | openpyxl | Full Excel feature support |
| Word Processing | python-docx | DOCX manipulation |
| PowerPoint Processing | python-pptx | PPTX handling |
| Translation | deep-translator | Multi-provider abstraction |
| Server | Uvicorn | ASGI server |
| Validation | Pydantic | Request/response validation |
Extension Points
-
Add Translation Provider
- Implement
TranslationProviderinterface - Register in
translation_service.py
- Implement
-
Add Document Type
- Create new translator class
- Register in routing logic
- Add to supported extensions
-
Add MCP Server
- Use provided
mcp_server_example.py - Configure in MCP settings
- Deploy alongside API
- Use provided
-
Add Caching
- Implement translation cache
- Use Redis or in-memory cache
- Reduce API calls for repeated text
-
Add Queue System
- Implement Celery/RQ workers
- Handle long-running translations
- Provide job status endpoints