Rechercher

Automatisation Multilingue : Mon Script AI-Powered Markdown Translator

Je suis ravi de vous présenter mon projet AI-Powered Markdown Translator, un script Python open-source qui traduit automatiquement les fichiers Markdown de mon blog et certains README/documentations de mes dépôts GitHub. En intégrant des modèles d’intelligence artificielle de pointe comme OpenAI, Mistral AI, Anthropic (Claude) et Google Gemini, cet outil traduit articles, README et documentations techniques dans 14 langues, tout en conservant leur structure et leur formatage. Ce projet met en lumière mes compétences en automatisation, intégration d’IA et ingénierie de fiabilité, ainsi que ma passion pour rendre le contenu technique accessible à tous.

Ce n’est pas juste un script : c’est une preuve de mon expertise et de ma vision pour un monde numérique plus inclusif.

Pourquoi ce projet ?

Les fichiers Markdown sont essentiels à mon écosystème numérique : ils contiennent mes articles de blog, tutoriels et documentations open-source. En automatisant leur traduction, je rends mon contenu accessible à une audience mondiale. Mon blog est désormais disponible en 14 langues grâce à ce script — près de 1 800 versions traduites (en ordre de grandeur, hors sources FR) sont aujourd’hui en ligne sur jls42.org, et le compteur grimpe à chaque publication.

La v1.9 (mai 2026) marque un cap : code développé au feeling (vibe coding) en pair-IA (Claude Code + Codex), sécurisé par une stack qualité industrielle (14 hooks, 229 tests, SonarCloud, revue PR assistée IA) pour viser un code propre même quand chaque ligne n’est pas relue à la main.

Voici les exemples concrets du script en action :

  • Ce blog jls42.org en 14 langues — toute l’expérience éditoriale multilingue (articles, projets, actualités IA) est produite par ce script. Vous pouvez par exemple parcourir la version allemande, japonaise, chinoise, espagnole ou arabe du site — chaque contenu éditorial traduit est passé par lui (les éléments d’interface, eux, viennent du système i18n natif d’Astro).
  • Le README du projet lui-même est traduit en 14 langues sur GitHub. Exemples : anglais, espagnol, chinois.

Ce projet montre comment l’IA peut résoudre des problèmes pratiques tout en favorisant l’accessibilité.

Mes compétences à l’honneur

Ce projet est une vitrine de mon savoir-faire technique. Voici ce qu’il met en avant :

  • Orchestration multi-modèle : Claude Code en Opus pour développer, Codex en solution de repli (fallback), GPT-5.5 reasoning extra-high pour challenger les plans, /pr-review-toolkit pour la revue avant merge
  • Intégration d’API d’IA multiples : 4 providers connectés (OpenAI, Mistral AI, Claude, Gemini), avec adaptation aux spécificités de chaque API (gestion des finish_reason / stop_reason, formats de réponse, limites de tokens)
  • Ingénierie de fiabilité : validation post-traduction double couche (déterministe anti-fuite verbatim + probabiliste langdetect), détection des échecs silencieux (silent failures), retours par statut explicite
  • Stack qualité industrielle : 14 hooks automatisés (ruff, mypy, shellcheck, Opengrep SAST, pip-audit, Lizard…), 229 tests unittest, 11 badges SonarCloud, plus Codacy et CodeFactor
  • Esprit open-source : disponible sur GitHub, GPLv3, README traduit dans 14 langues

Ces aspects témoignent de ma capacité à créer des outils puissants, fiables et maintenables sur le long terme.

Fonctionnalités principales

Voici ce que le script offre :

  • Multi-Provider : support de 4 APIs (OpenAI, Mistral AI, Claude, Gemini)
  • Modèles 2026 : GPT-5.5, Claude Sonnet 4.6, Gemini 3.1 Pro par défaut
  • Mode Économique (--eco) : modèles plus rapides et moins coûteux
  • Fichier Unique (--file) : traduire un seul fichier au lieu d’un répertoire entier
  • Conservation du nom (--keep_filename) : garde le nom et l’extension originaux (idéal pour Astro, Hugo, etc.)
  • Support .env : chargement automatique des clés API depuis un fichier .env
  • Support fichiers .mdx : en plus des fichiers .md classiques
  • Préservation du formatage : blocs de code, code inline, liens et métadonnées restent intacts

Nouveautés v1.9 (mai 2026) :

  • Validation post-traduction : détection automatique des échecs silencieux (silent failures) — langue cible vérifiée, troncations interceptées sur tous les providers.
  • Note multi-position (--note_position, --note_format) : haut, bas ou les deux ; format hérité (legacy) ou format marqueur (marker format) compatible carte embarquée (embed card) GitHub.
  • Mode --news renforcé : déjà introduit en v1.8 pour protéger les citations sources EN par placeholders, le mode bénéficie en v1.9 d’une validation post-restauration durcie (placeholder résiduel = erreur, citation originale et URL d’attribution vérifiées, drapeaux cible/source contrôlés) — utilisé sur tous les articles ia-actualites du blog.
ProviderQualité (défaut)Économique (--eco)
OpenAIgpt-5.5gpt-5.4-mini
Claudeclaude-sonnet-4-6claude-haiku-4-5-20251001
Mistralmistral-large-latestmistral-small-latest
Geminigemini-3.1-pro-previewgemini-3.1-flash-lite-preview

Évolution v1.0 → v1.9

VersionDateApport principal
1.0–1.42024OpenAI, puis Mistral, puis Claude
1.5sept. 2024Refactor clients, modèles 2024 (gpt-4o, claude-3.5-sonnet)
1.6janv. 2026Modèles 2026 (gpt-5, claude-sonnet-4-5, gemini-3-pro), Gemini, mode --eco, fichier unique (--file)
1.7janv. 2026--keep_filename, .env, code inline préservé
1.8mars 2026Modèles GPT-5.4 par défaut, mode --news avec placeholders citations
1.9mai 2026Validation post-traduction, note multi-position, stack qualité 14 hooks + 229 tests + revue IA

Développement au feeling + garde-fous

Toute la v1.9 a été écrite en pair-IA. Mon flux : Claude Code (Opus, exclusivement) tape le code, Codex prend le relais quand Opus bloque ou que la fenêtre d’usage est saturée, GPT-5.5 (reasoning extra-high) challenge les plans avant exécution, et le skill /pr-review-toolkit:review-pr relit la PR avant chaque merge. Je ne relis pas le code moi-même. Pour que ce mode de développement soit viable en production, j’ai investi dans une stack de garde-fous proportionnelle :

  • 14 hooks automatisés (pre-commit + pre-push) : shellcheck, ruff, prettier, detect-secrets, Lizard CCN, mypy, Opengrep SAST, pip-audit, unittest
  • 229 tests unittest (~98 % de couverture sur le nouveau code v1.9)
  • Tests pratiques : multi-repo sur des README variés, utilisation interne du produit (dogfooding) sur le blog (production = test live), vérification du rendu visuel (navigateur ou aperçu Markdown)
  • 3 plateformes externes : SonarCloud (11 badges), Codacy, CodeFactor
  • Skill /pr-review-toolkit:review-pr : revue assistée IA multi-agents avant merge
  • Validation post-traduction double couche : déterministe (anti-fuite verbatim) + probabiliste (langdetect)

L’idée n’est pas de prouver qu’on sait faire de l’ingénierie classique. C’est qu’on n’a pas le choix : du code IA non relu mérite plus de garde-fous, pas moins. Cette discipline est détaillée dans le deep-dive technique.

En production sur ce blog

Le projet se traduit lui-même : son README est en 14 langues, et il génère toutes les versions multilingues de ce blog.

  • Articles blog, 4 projets et 98 articles ia-actualites représentent près de 1 800 versions traduites hors sources FR (couverture par langue variable selon les contenus)
  • Mode --news utilisé systématiquement sur les articles ia-actualites pour préserver les citations sources EN
  • Garde-fou v1.9 actif depuis mai 2026 : depuis l’introduction de la double validation post-traduction, je n’ai plus détecté de silent-failure de langue cible
  • Méta-cohérence : la page que vous lisez en anglais, allemand, japonais… est traduite par ce script

Pour aller plus loin

Pour comprendre comment cette v1.9 a été produite (les nouveautés en détail, le flux de travail multi-modèle, les garde-fous mis en place pour viser un code propre sans relire), voir le deep-dive technique complet.

Et pour comparer le ton avec une release antérieure, l’article 2024 sur la v1.5 suit un format release notes plus classique.

Essayez-le vous-même

Découvrez le projet sur GitHub, testez-le avec vos fichiers Markdown, et partagez vos retours. Vos idées m’aident à le perfectionner !

Contact : contact@jls42.org