Produire une vidéo de formation coûte cher : tournage, montage, voix off, validation pédagogique. Produire cette même vidéo cinq fois, une par langue, multiplie ce coût par cinq sans multiplier la valeur pédagogique par autant. C’est le problème concret auquel se heurte toute plateforme de formation en ligne qui veut couvrir plusieurs marchés linguistiques sans faire exploser son budget de production.
La solution la plus robuste, largement éprouvée dans l’industrie du sous-titrage professionnel, consiste à séparer strictement le fichier vidéo, unique et partagé par toutes les langues, du texte qui l’accompagne, porté par des fichiers de sous-titres au format WebVTT reliés à la structure multilingue du site WordPress.
Un seul fichier vidéo, plusieurs pistes de texte
Concrètement, la vidéo source (hébergée sur un service comme Vimeo, ou auto-hébergée) reste strictement identique quelle que soit la langue de consultation. Ce qui change, c’est le fichier de sous-titres associé, un simple fichier texte au format .vtt contenant les horodatages et le texte traduit :
WEBVTT
00:00:04.000 --> 00:00:08.000
Bienvenue dans ce module sur la gestion des stocks.
00:00:08.500 --> 00:00:13.000
Nous allons voir comment configurer les seuils d'alerte.
La balise HTML5 <track>, associée à l’élément <video>, permet de proposer plusieurs pistes de sous-titres pour un même fichier vidéo, chacune identifiée par un code de langue :
<video controls>
<source src="module-stocks.mp4" type="video/mp4">
<track kind="subtitles" srclang="fr" label="Français" src="module-stocks-fr.vtt" default>
<track kind="subtitles" srclang="en" label="English" src="module-stocks-en.vtt">
<track kind="subtitles" srclang="de" label="Deutsch" src="module-stocks-de.vtt">
</video>
Faire choisir la bonne piste automatiquement

Laisser l’apprenant sélectionner manuellement sa langue de sous-titres à chaque vidéo fonctionne, mais alourdit inutilement l’expérience sur une plateforme déjà organisée par langue via Polylang. La bonne pratique consiste à faire correspondre automatiquement l’attribut default de la balise <track> à la langue active du site, détectée côté PHP au moment du rendu du gabarit :
<?php
$current_lang = function_exists( 'pll_current_language' ) ? pll_current_language() : 'fr';
?>
<video controls>
<source src="module-stocks.mp4" type="video/mp4">
<?php foreach ( $subtitle_tracks as $lang => $file ) : ?>
<track kind="subtitles" srclang="<?php echo esc_attr( $lang ); ?>"
src="<?php echo esc_url( $file ); ?>"
<?php echo ( $lang === $current_lang ) ? 'default' : ''; ?>>
<?php endforeach; ?>
</video>
L’apprenant qui navigue sur la version allemande du site voit automatiquement la piste allemande activée par défaut, sans manipulation supplémentaire, tout en gardant la possibilité de changer de piste directement dans les contrôles natifs du lecteur vidéo.
Où stocker les fichiers de sous-titres dans WordPress
Deux approches coexistent selon la taille de la plateforme. Pour un catalogue de vidéos modeste, un champ personnalisé par langue sur la fiche du module (via des champs ACF répétables, un par langue) suffit largement et reste simple à gérer pour une petite équipe pédagogique. Pour un catalogue de plusieurs centaines de modules, il devient plus robuste de nommer les fichiers de sous-titres selon une convention stricte liée à l’identifiant du module et au code de langue, puis de les servir dynamiquement sans passer par un champ de base de données pour chacun, ce qui évite une explosion du nombre de champs à maintenir.
Le cas particulier de la voix off
Le sous-titrage seul ne suffit pas toujours : certains publics, notamment en formation obligatoire ou réglementaire, exigent une voix off doublée plutôt qu’un simple sous-titre. Dans ce cas, la piste audio elle-même doit être multipliée par langue, ce qui casse partiellement l’économie du fichier vidéo unique. La solution la plus courante reste alors de conserver une seule piste vidéo mais de synchroniser une piste audio alternative via la balise <audio> pilotée par script, une solution plus complexe à maintenir qui ne se justifie que si l’obligation réglementaire l’impose vraiment.
- Séparer strictement le fichier vidéo, unique, du texte traduit porté par les sous-titres
- Utiliser le format WebVTT et la balise
<track>plutôt qu’un lecteur vidéo propriétaire fermé - Faire correspondre automatiquement la piste par défaut à la langue Polylang active
- Réserver le doublage audio complet aux cas où une obligation réglementaire l’impose réellement
En résumé
Le sous-titrage centralisé transforme un problème de production vidéo coûteux en un problème de traduction de texte, beaucoup plus simple à budgétiser et à faire évoluer. Une plateforme de e-learning qui adopte cette architecture dès le départ peut ajouter une nouvelle langue de couverture en ne produisant qu’un fichier de sous-titres par module existant, sans jamais retourner en salle de tournage.