Contact
Travaillons ensemble
Plateforme Centralisee de Gestion des Traductions Multilingues

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.

2014 - 2015
~18 mois (scaffold + développement métier)
Senior Software Engineer (75% du code)
PHP 5.3+Symfony 2.4MySQLDoctrine DBALTwigjQuery 2.1jQuery UI 1.10Bootstrap 3.1Select2 3.4SwiftMailerAmazon SESGettext PO/MOSVNComposer

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.

Écosystème de traduction
L'outil centralisé alimente 6+ projets dans l'écosystème
Répartition des contenus de traduction

Objectifs, Contexte, Enjeux et Risques

Pourquoi cet outil était critique pour le business

Objectifs
  • 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
Contexte technique

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.

Enjeux business
  • 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
Risques identifiés

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.

Couverture linguistique

Les Etapes - Ce que j'ai fait

De la reprise du scaffold a la plateforme complete

Chronologie du projet
~18 mois du scaffold a la livraison finale
Phase 1
Scaffold & Infrastructure
Mai-Nov 2014
  • 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
Phase 2
Module traduction BDD
Mars-Avr 2015
  • 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
Phase 3
Modules traduction PO
Avr-Aout 2015
  • 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
Phase 4
Bootstrap UI & UX
Mars-Sep 2015
  • 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
Phase 5
Fonctionnalités avancees
Sep-Nov 2015
  • 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
Architecture applicative
Architecture MVC Symfony 2 avec 3 controleurs et 2 services
Flux d'édition d'une traduction
Du double-clic a la compilation .mo
Schema BDD (Diagramme ER)
7 tables MySQL pour les traductions multilingues du catalogue
Metriques du code

Les Acteurs - Les Interactions

Un projet porté par un développeur au sein d'un petit écosystème

Répartition des contributions (metadonnees SVN)

Fichiers modifies par développeur (hors vendor/)

Jose (75,4%)

Dev principal

285 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 initial

82 fichiers. Scaffold Symfony, structure du TraductionBundle, FieldEdition.js, premiers assets.

Yves (2,4%)

DevOps

9 fichiers. Config environnement, script de backup, composer.lock.

Thomas (0,5%)

Developpeur

2 fichiers. Config Doctrine. Son code de parsing PO a été remplace.

Parties prenantes externes
  • 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

Impact business
  • 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
Croissance personnelle
  • 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
Livrables
  • 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.

Diagramme d'infrastructure
Production sur 2 serveurs OVH + Amazon SES

Mon Regard critique

Points forts, points faibles et lecons durables

Points forts

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.

Points d'amélioration

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.

Lecons durables
  • 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

Galerie d'images

Captures et visuels du projet

Document de vue d'ensemble des specifications
Specifications fonctionnelles de la plateforme de gestion des traductions
Capture d'écran de l'interface de listing des projets
Listing multi-projets avec progression de traduction par langue
Interface du moteur de recherche de traductions
Recherche dans toutes les traductions avec filtres par langue et projet
Capture d'écran de la fonctionnalité de copie de référence
Copie rapide des clés de traduction pour l'intégration développeur
Fonctionnalite de memo pour notes de traduction
Notes contextuelles attachees aux entrées de traduction pour les traducteurs
Panneau d'administration de gestion des utilisateurs
Controle d'acces par role pour traducteurs, relecteurs et administrateurs
Interface d'import/export de fichiers PO/MO
Import et export en lot de fichiers de traduction PO/MO par projet