
Plateforme Centralisee de Gestion des Traductions Multilingues
Une application web interne centralisant la gestion des traductions dans 7 langues européennes pour une marketplace B2B d'objets promotionnels - édition AJAX inline, gestion de fichiers PO/MO, rappels automatiques et synchronisation multi-projets.
Langues
7
fr, en, de, it, es, nl, pt
Lignes de code
~4 332
PHP, Twig, JS, CSS, YAML
Routes
15
Dans routing.yml
Projets alimentes
6+
ES, Extranet, es_suppliers, MEW...
Presentation
Un outil sur mesure pour gérer les traductions d'une plateforme B2B européenne
Ce projet est une application web interne de gestion centralisée des traductions multilingues, développée pour European Sourcing, une entreprise du secteur B2B de l'objet publicitaire. Accessible via un sous-domaine dédié, l'outil permet aux équipes internes de gérer, éditer, valider et exporter les traductions du site principal europeansourcing.com et de ses sous-projets.
L'application géré deux types de contenus distincts : les traductions en base de données (categories, attributs, mots-clés, marquages, produits) dans MySQL, et les traductions de textes d'interface via des fichiers PO/MO GNU gettext sur 2 domaines (interface et communication). Elle couvre 7 langues européennes et alimente 6+ projets interconnectes.
Edition AJAX inline
Double-clic pour éditer, Entrée pour sauvegarder - sans rechargement. Navigation clavier entre les champs.
Suivi de vérification
Code couleur vert/rouge pour les traductions verifiees/non verifiees sur tous les types.
Rappels email automatiques
Commande CLI envoyant un recapitulatif des traductions non verifiees via Amazon SES.
Export CSV avec filtres
Export de toutes les traductions en CSV multilingue, filtrable par projet source.
Objectifs, Contexte, Enjeux et Risques
Pourquoi cet outil était critique pour le business
- Centraliser toutes les traductions dans une interface unique
- Permettre l'édition en temps réel via AJAX (double-clic, Entrée)
- Suivre l'état de vérification avec retour visuel (vert/rouge)
- Exporter les traductions en CSV pour un usage hors ligne
- Automatiser les rappels email pour les traductions non verifiees
- Compiler les .mo automatiquement après chaque édition
Le site principal europeansourcing.com était une application PHP/SQLI utilisant GNU gettext pour l'i18n. Gerer 7 langues européennes sur des milliers d'entrées du catalogue et de textes d'interface était impossible manuellement.
- Impact direct sur le CA international : des traductions incorrectes affectent la compréhension des produits
- Positionnement SEO : les categories et mots-clés traduits impactent le référencement dans les moteurs de recherche
- Cohérence multilingue : un même terme doit être traduit de manière cohérente dans les 6+ projets
Risque de corruption
Les modifications de fichiers PO par regex sans parsing complet etaient fragiles et sujettes a corruption.
Vulnerabilite injections SQL
Requetes SQL construites par concaténation sans requêtes préparées dans le BDManager.
Controle d'acces minimal
Utilisateurs en mémoire avec mots de passe en clair, pas de gestion des roles par langue.
Dependance infrastructure
La synchronisation inter-serveurs reposait sur un "lecteur monte" dont la fiabilité n'était pas documentée.
Les Etapes - Ce que j'ai fait
De la reprise du scaffold a la plateforme complete
- Steve a installé Symfony 2.4, créé le TraductionBundle avec sa structure
- Thomas a configure Doctrine/MySQL et le transport Amazon SES
- Yves a configure l'environnement dev, ecrit le script de backup
- Developpe le BDController + BDManager pour les traductions en BDD
- Recherche paginée avec tri par état de vérification
- Edition AJAX inline avec double-clic et sauvegarde automatique
- Autocompletion jQuery UI sur le champ de recherche
- Developpe WebSiteController + CommunicationController avec le POManager
- Remplace le parser PO fragile par la bibliotheque Gettext\Translations
- Construit le suivi verified.json pour l'état de validation des traductions PO
- Compilation automatique des .mo via msgfmt après chaque édition
- Navigation par onglets entre les 7 types de traduction
- Tableaux de résultats avec 249 drapeaux PNG
- Navigation clavier (Entrée pour sauvegarder, focus automatique)
- Surlignage des termes recherches via jQuery Highlight
- Export CSV multilingue, filtrable par projet source
- Ajout/suppression de clés pour les traductions de communication
- References de provenance montrant quel projet utilise chaque texte
- LaunchMailCommand pour rappels automatiques via Amazon SES
- Régénération automatique des JSON pour es_suppliers après chaque édition
Les Acteurs - Les Interactions
Un projet porté par un développeur au sein d'un petit écosystème
Fichiers modifies par développeur (hors vendor/)
Jose (75,4%)
Dev principal285 fichiers. Les 3 controleurs, 2 services, templates Twig, routing, commande CLI, 249 drapeaux. Remplace le parser PO de Thomas. Auteur de 75% du projet.
Steve (21,7%)
Dev initial82 fichiers. Scaffold Symfony, structure du TraductionBundle, FieldEdition.js, premiers assets.
Yves (2,4%)
DevOps9 fichiers. Config environnement, script de backup, composer.lock.
Thomas (0,5%)
Developpeur2 fichiers. Config Doctrine. Son code de parsing PO a été remplace.
- SQLI - Agence ayant développé le site principal europeansourcing.com
- OVH - Hébergement serveurs dédiés
- Amazon Web Services (SES) - Envoi d'emails
Les Résultats
Impact pour le projet, le business et la croissance personnelle
- Les traducteurs gerent les traductions de manière autonome sans intervention développeur
- L'édition AJAX inline avec autocompletion et navigation clavier a accéléré le workflow
- Le suivi de vérification avec rappels email a permis d'identifier et combler les lacunes
- Les traductions alimentent 6+ projets/sous-domaines de l'écosystème
- Expertise en workflows i18n/l10n : GNU gettext PO/MO, données multilingues, suivi d'état
- Compétences full-stack renforcees : Symfony 2, Doctrine DBAL, jQuery AJAX, Bootstrap
- Appris a remplacer les parsers custom fragiles par des bibliotheques eprouvees
- Expérience de reprise de projet : suis intervenu après 6 mois de scaffold et ai livré un outil opérationnel
- 15 fonctionnalités livrées (édition inline, recherche, autocompletion, pagination, export, références, gestion de clés, rappels email, compilation automatique, backup...)
- 7 langues couvertes avec suivi de vérification complet
- 14 fichiers PO geres (7 langues x 2 domaines)
- 6+ projets alimentes avec synchronisation automatique
Les Lendemains du projet
Du déploiement en production à l'archivage
Apres la livraison, les traducteurs utilisaient l'outil quotidiennement. Les rappels email automatiques ont maintenu un bon taux de couverture, et l'export CSV a permis aux prestataires de travailler hors ligne.
Le projet est archivé (backup SVN sur NAS). European Sourcing a continué à évoluer, mais cet outil est resté la fondation opérationnelle pendant plusieurs années. Les choix architecturaux (séparation BDD/PO, édition AJAX inline) ont prouvé leur valeur dans la durée.
Mon Regard critique
Points forts, points faibles et lecons durables
Interface pragmatique
L'édition en double-clic avec sauvegarde AJAX est intuitive pour la traduction en masse. La navigation clavier optimise la productivite.
Separation de services propre
La distinction claire entre BDManager (BDD) et POManager (fichiers) permet un fonctionnement independant.
Suivi de vérification ingenieux
verified.json comme stockage léger de l'état de validation - simple et efficace.
Intégration dans l'écosystème
Synchronisation avec es_suppliers, lien vers l'extranet, rappels email - s'intègre bien dans l'écosystème.
Vulnerabilite injections SQL
Le BDManager construit ses requêtes par concaténation. Aurait du utiliser des requêtes préparées.
Absence de tests
Le seul test est un placeholder Symfony qui teste /hello/Fabien. Aucune couverture métier.
Code duplique
CommunicationController et WebSiteController partagent ~90% de code. Aurait du être factorisé.
Absence de cache
Charger tous les fichiers PO en mémoire à chaque requête (1024M) est coûteux. Un cache Redis aurait aide.
- Ne jamais construire de requêtes SQL par concaténation - toujours utiliser des requêtes préparées.
- Preferer les bibliotheques eprouvees aux parsers custom pour les formats standards (PO, CSV, XML).
- Factoriser tot - quand 2 controleurs partagent 90% de code, l'abstraction n'est pas prematuree.
- Un outil interne merite aussi des tests - surtout quand il manipule des données critiques.
Parcours associe
Experience professionnelle liee a cette realisation
Competences mobilisees
Competences techniques et humaines appliquees
Competences techniques
Competences humaines
Galerie d'images
Captures et visuels du projet






