Word fixes:
W1 — Fix hyperlink double-collect: a run inside <w:hyperlink> was
previously collected twice (once via paragraph.runs, once via
the manual hyperlink iter). Now uses a dedup set of element
ids to collect each run exactly once.
NB: python-docx 1.x's paragraph.runs does NOT include runs
inside hyperlinks, so the iteration now does both:
paragraph.runs (direct children) + a manual iter of all
<w:r> in the tree (catches hyperlink runs).
W2 — Fix footnotes import: used document.part.package.part_related_by
which doesn't exist in python-docx 1.x, so footnotes were never
collected. Now uses document.part.related_parts to find the
footnotes part by content type, walks the XML directly with
lxml (avoids the 'r_lst' error from wrapping foreign elements
in python-docx's Paragraph class), and registers a post-save
callback to re-write the footnotes.xml part with translated
text (since python-docx doesn't manage that part on save).
Same fix applied to endnotes.
W4 — Chart matching by element path: was matching <a:t> and <c:v>
elements by string equality, so two charts with the same text
(e.g. two 'Revenue' series) would only have the first one
translated. Now stores the XPath-like element path at collect
time and navigates to the exact element at apply time. Falls
back to string matching for legacy entries without a path.
Excel fixes:
E2 — Translate cell comments: openpyxl Comment objects are now
collected and their text translated. The Comment object is
replaced in place after translation.
E3 — Translate cell hyperlink display labels: cell.hyperlink.display
(or .target if no display) is collected and translated. The
URL itself is never sent for translation, so it remains
intact. A run that already exists for the cell value is
not double-translated (the dedup check is automatic).
E4 — Chart matching by element path: same fix as W4 but for
Excel. Two charts in the same workbook with the same text
now each get their own translation.
Tests:
Added tests/test_translators/test_b1_format_fixes.py with 11 tests
covering all the fixes. All 11 pass. Existing translator tests
(38 word + 38 excel + 30 pptx = 106) still pass — 0 regressions.
Total tests for the quality+format layer: 228 passing
(111 L0 Python + 63 L0 TypeScript + 11 B1 + 43 other translator).
All fixes are surgical: existing translation flow is preserved.
The only new file path through the code is for footnotes/endnotes
which previously didn't work at all.
📄 Wordly.art — Document Translation Portal
Wordly.art est une application complète et prête pour la production (SaaS-ready) permettant de traduire des documents bureautiques complexes (Excel, Word, PowerPoint) tout en préservant strictement la mise en page originale, le style, les formules et les médias intégrés.
Ce fichier sert de portail central pour accéder à toutes les documentations techniques, guides d'exploitation, de déploiement et de secours de l'application.
🗺️ Carte de la Documentation
Pour faciliter la navigation, utilisez les liens ci-dessous pour accéder directement aux guides spécialisés :
🚀 Démarrage & Utilisation
- 📥 Guide de démarrage rapide (QUICKSTART.md) : Installation locale et lancement du projet en développement.
- 📖 Guide d'utilisation de l'API (GUIDE_UTILISATION.md) : Exemples de requêtes de traduction, gestion du glossaire et des presets techniques (CVC, IT, Légal, etc.).
- 💡 Fiche de référence rapide (QUICK_REFERENCE.md) : Commandes utiles, ports réseaux, identifiants par défaut et astuces rapides.
🏗️ Architecture & Conception
- 📐 Architecture logicielle (ARCHITECTURE.md) : Choix technologiques, flux de données, gestion du cycle de vie des fichiers, sécurité (HSTS, CSP) et monitoring.
🌐 Déploiement en Production
- 🏢 Guide de Déploiement Général (DEPLOYMENT_GUIDE.md) : Guide standard pour le déploiement de production sous Docker avec reverse-proxy Nginx et SSL.
- ☁️ Déploiement sur IONOS (DEPLOY_IONOS.md) : Instructions spécifiques pour déployer l'infrastructure sur un serveur virtuel IONOS.
🛡️ Sauvegarde, Résilience & Secours (Disaster Recovery)
- 💾 Plan de Reprise d'Activité (DISASTER_RECOVERY.md) : Guide complet du système de sauvegarde automatique vers le NAS via SSH/rsync, monitoring et automatisation du failover.
- 🔄 Procédure de Restauration Simplifiée (PROCEDURE_RESTAURATION.md) : Guide d'urgence pas-à-pas pour restaurer les données sur le serveur actif ou basculer en 20 minutes sur le serveur de secours (
.98).
✨ Fonctionnalités Clés
🔄 Multi-fournisseurs de Traduction
L'application supporte 7 moteurs de traduction, activables à la volée :
- Google Translate (Gratuit, rapide, par défaut)
- DeepL API (Haute qualité pour l'entreprise)
- OpenAI (Modèles GPT-4o, support de la vision)
- DeepSeek, OpenRouter, Minimax, x.ai (Zai) (Modèles de pointe pour traductions complexes)
📁 Traduction Intelligente par Fichier
- Excel (.xlsx) : Conserve la fusion des cellules, les formules, les polices de caractères, les styles de bordures et traduit également le texte contenu dans les images (via modèles vision).
- Word (.docx) : Préserve les en-têtes, pieds de page, tableaux, listes à puces et la mise en forme des paragraphes.
- PowerPoint (.pptx) : Conserve la mise en page des diapositives, les animations et transitions.
🏢 Sécurité & Exploitation (SaaS-Ready)
- 🚦 Limitation de débit (Rate Limiting) : Par IP client avec algorithme Token Bucket stocké dans Redis.
- 🧹 Nettoyage automatique (Auto Cleanup) : Suppression automatique des fichiers temporaires après expiration de la durée de vie (TTL).
- 📊 Monitoring complet : Route
/healthdétaillée et intégration Prometheus + Grafana pour suivre les performances physiques et logicielles.
🛠️ Stack Technique
Backend
- FastAPI (Python 3.11+) : API asynchrone rapide et documentée (Swagger disponible sur
http://localhost:8000/docs). - openpyxl, python-docx, python-pptx : Moteurs de manipulation de documents sans dépendance Microsoft Office.
- Docker / Docker Compose : Isolation complète de l'application, de la base PostgreSQL et du cache Redis.
Frontend
- Next.js 15 (React) & Tailwind CSS : Interface utilisateur moderne, ergonomique et responsive.
- Lucide Icons : Bibliothèque d'icônes vectorielles.
🚀 Lancement Rapide (Mode Dev)
Pour un déploiement complet en production ou homelab, veuillez vous référer aux fichiers de déploiement listés dans la Carte de la Documentation.
# 1. Cloner le projet
git clone https://gitea.parsanet.org/sepehr/office_translator.git /opt/wordly
cd /opt/wordly
# 2. Configurer l'environnement
cp .env.example .env
# Modifiez les variables dans le .env selon vos besoins
# 3. Lancer avec Docker Compose
docker compose up -d --build
- API (Backend) :
http://localhost:8000(Documentation Swagger sur/docs) - Interface Web (Frontend) :
http://localhost:3000