# Guide d'utilisation - Office Translator ## Présentation **Office Translator** est une plateforme SaaS de traduction de documents Office (Excel `.xlsx`, Word `.docx`, PowerPoint `.pptx`) qui préserve le formatage original du document. L'utilisateur dépose un document, le récupère traduit, et le fichier reste visuellement identique à l'original (couleurs, cellules fusionnées, graphiques, mises en page). ### Stack technique | Composant | Technologie | |-----------|-------------| | Backend | Python 3.11+, FastAPI, uvicorn | | Frontend | Node 20, Next.js 15 | | Base de données | PostgreSQL 16 (prod) / SQLite (dev) | | Cache & sessions | Redis 7 | | Reverse proxy (prod) | Nginx | | Conteneurisation | Docker + Docker Compose | ### Fournisseurs de traduction supportés | Fournisseur | Type | Clé API requise | |-------------|------|----------------| | Google Translate | Classique | Non (via deep_translator) | | DeepL | Classique | Oui (`DEEPL_API_KEY`) | | OpenAI (GPT-4o-mini) | LLM | Oui (`OPENAI_API_KEY`) | | Ollama (Llama3) | LLM local | Non (local) | | OpenRouter | LLM | Oui (`OPENROUTER_API_KEY`) | Les fournisseurs sont utilisés via une **chaîne de fallback** configurable (si un échoue, le suivant prend le relais). --- ## Prérequis - **Docker** (Engine 20.10+) et **Docker Compose V2** (`docker compose`) - Un terminal (bash, zsh, PowerShell) - Pour un lancement sans Docker (dev local) : Python 3.11+, Node 20+, PostgreSQL et Redis optionnel --- ## Méthode 1 : Lancement avec Docker (recommandé) ### 1. Cloner le dépôt ```bash git clone cd office_translator ``` ### 2. Configurer les variables d'environnement ```bash cp .env.example .env ``` Éditer le fichier `.env` et remplir les champs requis. Voici les variables minimales pour le développement : ```env # Obligatoire JWT_SECRET_KEY= ADMIN_USERNAME=admin ADMIN_PASSWORD=votre_mot_de_passe_admin # Base de données (Docker s'occupe du reste) # DATABASE_URL est construit automatiquement par Docker Compose # Frontend NEXT_PUBLIC_API_URL=http://localhost:8000 ``` Pour la **production**, les variables suivantes sont obligatoires (l'application refuse de démarrer sans elles) : | Variable | Description | |----------|-------------| | `JWT_SECRET_KEY` | Clé de signature JWT | | `ADMIN_USERNAME` | Identifiant admin | | `ADMIN_PASSWORD` ou `ADMIN_PASSWORD_HASH` | Mot de passe admin | | `ADMIN_TOKEN_SECRET` | Secret pour les sessions admin | | `DATABASE_URL` (ou `POSTGRES_*`) | URL de connexion PostgreSQL | | `REDIS_URL` | URL Redis (si rate limiting activé) | ### 3. Lancer l'application **Environnement de développement** (avec hot reload) : ```bash docker compose -f docker-compose.dev.yml up ``` **Environnement de production** : ```bash docker compose up -d ``` ### 4. Vérifier que tout fonctionne | Service | URL | |---------|-----| | Frontend | http://localhost:3000 | | Backend API | http://localhost:8000 | | Documentation API (Swagger) | http://localhost:8000/docs | | Documentation API (ReDoc) | http://localhost:8000/redoc | | Health check | http://localhost:8000/health | ### 5. Arrêter l'application ```bash # Développement docker compose -f docker-compose.dev.yml down # Production docker compose down ``` > Pour supprimer aussi les volumes (données) : ajouter `--volumes` --- ## Méthode 2 : Lancement local sans Docker (développement) ### 1. Backend (FastAPI) ```bash # Créer un environnement virtuel python -m venv .venv source .venv/bin/activate # Linux/macOS # .venv\Scripts\activate # Windows # Installer les dépendances pip install -r requirements.txt # Configurer l'environnement cp .env.example .env # Éditer .env avec vos valeurs # Lancer les migrations de base de données alembic upgrade head # Lancer le serveur uvicorn main:app --host 0.0.0.0 --port 8000 --reload ``` Le backend est accessible sur http://localhost:8000 ### 2. Frontend (Next.js) ```bash cd frontend # Installer les dépendances npm install # Configurer l'URL du backend # Créer frontend/.env.local avec : # NEXT_PUBLIC_API_URL=http://localhost:8000 # Lancer en développement npm run dev ``` Le frontend est accessible sur http://localhost:3000 --- ## Services optionnels en production ### Ollama (LLM local) Pour utiliser un modèle LLM local (Ollama), ajouter le profil `with-ollama` : ```bash docker compose --profile with-ollama up -d ``` Configurer dans `.env` : ```env TRANSLATION_SERVICE=ollama OLLAMA_BASE_URL=http://ollama:11434 OLLAMA_MODEL=llama3 ``` ### Monitoring (Prometheus + Grafana) ```bash docker compose --profile with-monitoring up -d ``` --- ## Utilisation de l'application ### 1. Créer un compte 1. Aller sur http://localhost:3000 2. Cliquer sur **S'inscrire** (Register) 3. Remplir le formulaire d'inscription ### 2. Se connecter 1. Aller sur la page de connexion 2. Entrer email et mot de passe 3. Accéder au tableau de bord (Dashboard) ### 3. Traduire un document 1. Depuis le Dashboard, cliquer sur **Nouvelle traduction** 2. **Uploader** un fichier `.xlsx`, `.docx` ou `.pptx` (max 50 Mo par défaut) 3. **Choisir la langue source** et la **langue cible** 4. **Sélectionner le mode de traduction** : - **Classique** : Google Translate / DeepL (rapide, < 15 sec) - **LLM** : Ollama / OpenAI (1-3 min, meilleure qualité contextuelle) 5. Cliquer sur **Traduire** 6. Suivre la **barre de progression** en temps réel 7. **Télécharger** le fichier traduit une fois terminé ### 4. Utilisation de l'API REST L'API est accessible directement (pour les intégrations) : ```bash # Health check curl http://localhost:8000/health # Traduire un document curl -X POST http://localhost:8000/api/v1/translate \ -H "Authorization: Bearer " \ -F "file=@document.docx" \ -F "source_lang=fr" \ -F "target_lang=en" \ -F "mode=classic" ``` La documentation interactive est disponible sur : - Swagger UI : http://localhost:8000/docs - ReDoc : http://localhost:8000/redoc ### 5. Accès Admin 1. Se connecter avec les identifiants admin (configurés dans `.env`) 2. Le tableau de bord admin permet de : - Surveiller la santé du système (disque, mémoire, Redis, DB) - Gérer les utilisateurs et leurs abonnements (tiers) - Consulter les statistiques de traduction - Nettoyer manuellement les fichiers temporaires - Consulter les logs d'erreurs --- ## Fonctionnalités avancées (plan Pro/Business) ### Glossaires Créer des glossaires pour garantir la cohérence terminologique lors des traductions LLM : 1. Dashboard > Glossaires 2. Créer un glossaire avec des paires de termes (source → cible) 3. Importer/exporter en CSV ### Prompts personnalisés Définir des prompts système personnalisés pour les traductions LLM : 1. Dashboard > Custom Prompts 2. Créer un prompt avec les instructions de traduction ### Clés API Générer des clés API pour accéder au service programmatiquement : 1. Dashboard > API Keys 2. Créer une clé et l'utiliser via le header `X-API-Key` --- ## Dépannage ### L'application ne démarre pas - **"Missing required env: ..."** : Des variables d'environnement obligatoires sont manquantes. Vérifier le fichier `.env` (voir la section configuration). - **Port déjà utilisé** : Vérifier que les ports 3000 et 8000 sont libres : `lsof -i :8000` et `lsof -i :3000`. ### Problèmes de connexion base de données - Vérifier que PostgreSQL est en cours d'exécution : `docker compose ps` - Vérifier les variables `DATABASE_URL` ou `POSTGRES_*` dans `.env` - Relancer les migrations : `alembic upgrade head` ### Problèmes Redis - Vérifier que Redis est en cours d'exécution : `docker compose ps` - Si `REDIS_URL` n'est pas défini en dev, le rate limiting peut fonctionner en mémoire (fallback) - En production, `REDIS_URL` est obligatoire si le rate limiting est activé ### Les fichiers ne sont pas traduits - Vérifier que le fournisseur de traduction est configuré (`TRANSLATION_SERVICE` dans `.env`) - Pour Google Translate : aucune clé nécessaire - Pour DeepL/OpenAI : vérifier que la clé API est valide - Pour Ollama : vérifier que le service est lancé et que le modèle est téléchargé ### Logs Les logs structurés (JSON en production) sont disponibles : - Dans le conteneur backend : `docker compose logs backend` - Dans le dossier `logs/` (monté en volume en production) --- ## Variables d'environnement principales | Variable | Requise (prod) | Défaut | Description | |----------|----------------|--------|-------------| | `ENV` | Non | `development` | Environnement (`development` / `production`) | | `JWT_SECRET_KEY` | Oui | - | Clé de signature JWT | | `DATABASE_URL` | Oui | SQLite local | URL PostgreSQL | | `REDIS_URL` | Oui (si rate limit) | - | URL Redis | | `TRANSLATION_SERVICE` | Non | `google` | Fournisseur par défaut | | `ADMIN_USERNAME` | Oui | - | Identifiant admin | | `ADMIN_PASSWORD` | Oui | - | Mot de passe admin | | `CORS_ORIGINS` | Non | `http://localhost:3000` | Origines CORS autorisées | | `NEXT_PUBLIC_API_URL` | Non | `http://localhost:8000` | URL du backend pour le frontend | | `MAX_FILE_SIZE_MB` | Non | `50` | Taille max des fichiers upload | | `LOG_LEVEL` | Non | `INFO` | Niveau de logs | | `RATE_LIMIT_ENABLED` | Non | `true` | Activer le rate limiting | | `CLEANUP_ENABLED` | Non | `true` | Nettoyage auto des fichiers | La liste complète et détaillée se trouve dans `.env.example`. --- ## Structure du projet ``` office_translator/ ├── main.py # Point d'entrée FastAPI ├── config.py # Configuration (variables d'environnement) ├── requirements.txt # Dépendances Python ├── alembic.ini # Configuration migrations DB ├── alembic/ # Migrations de base de données ├── routes/ # Endpoints API ├── services/ # Logique métier │ ├── providers/ # Fournisseurs de traduction (Google, DeepL, OpenAI, Ollama) │ ├── translation_service.py │ └── ... ├── translators/ # Traducteurs de documents (Excel, Word, PowerPoint) ├── middleware/ # Middlewares (rate limiting, sécurité, erreurs, cleanup) ├── models/ # Modèles de base de données ├── schemas/ # Schémas Pydantic (validation) ├── database/ # Connexion et sessions DB ├── frontend/ # Application Next.js │ ├── src/app/ # Pages et layout │ ├── src/components/ # Composants React │ └── src/messages/ # Fichiers de traduction i18n ├── docker/ # Fichiers Docker │ ├── backend/Dockerfile │ ├── frontend/Dockerfile │ └── nginx/ # Configuration Nginx (prod) ├── docker-compose.yml # Docker Compose production ├── docker-compose.dev.yml # Docker Compose développement ├── scripts/ # Scripts utilitaires └── tests/ # Tests unitaires et d'intégration ```