La mémoire de traduction
Le produit de ce site, c’est la boîte de traduction : elle tourne dans votre navigateur, et votre texte ne part nulle part. La mémoire n’est plus la façade du projet : elle vit désormais parmi les données ouvertes qu’il publie, au même rang que le registre des modèles et le dictionnaire de phrases humaines. Ce déplacement ne retire rien : le même registre continue d’être servi aux mêmes adresses, avec la même provenance par langue et la même licence. C’est le registre de toutes les phrases déjà traduites et validées à l’ODERSA, retrouvées à l’identique au lieu d’être retraduites. Comment elle est faite, ce qu’elle contient, et la frontière qu’elle ne franchit jamais avec ce qu’une machine produit.
Ce que la mémoire fait, que la boîte ne fait pas
Ce site s’ouvre désormais sur la boîte, pas sur ce registre : c’est elle, et non la mémoire, qui accueille qui arrive. Ce déplacement ne change rien à ce que la mémoire fait, ni à son exigence ; il la range simplement à sa vraie place, une pièce des données ouvertes du projet, au côté du registre des modèles et du dictionnaire de phrases humaines, plutôt que la vitrine du site.
Une machine propose une traduction : plausible, cohérente, refaite depuis zéro à chaque appel, et jamais garantie. Elle ne sait pas ce que l’ODERSA a déjà décidé d’écrire pour cette phrase précise, la dernière fois qu’elle s’est posée. La mémoire, elle, ne propose rien : elle dit ce qui a déjà été validé dans la maison, avec sa provenance déclarée, qui l’a écrit ou relu, et quand. Ce n’est pas une traduction de plus, c’est la réponse à une question qu’aucun modèle ne peut trancher seul : comment l’ODERSA a-t-elle déjà rendu cette phrase ?
Cela évite un défaut précis, coûteux, et longtemps invisible : une même phrase source rendue différemment d’un site de la flotte à l’autre, chacun l’ayant traduite pour lui-même sans savoir ce qu’un autre projet avait déjà écrit. Plus bas sur cette page, un rapport daté en donne la mesure exacte. La mémoire est ce qui permet de le savoir avant de publier, pas après.
Un registre de phrases, pas un dictionnaire
Un dictionnaire donne un mot pour un mot, hors de toute phrase. Une mémoire de traduction garde des phrases entières, ou des morceaux de phrase : un intitulé de bouton, un titre, une ligne d’aide. Chacune a déjà été traduite par une personne, et déjà validée. La prochaine fois que la même phrase source se présente, à l’identique, elle ne se retraduit pas : elle se retrouve, telle qu’elle a été validée la première fois.
Pour une structure qui traduit à quelques bénévoles, sans budget ni outil payant, cela change trois choses concrètes. Une chaîne d’interface déjà traduite l’an dernier, sur un autre site de l’ODERSA, ne se retraduit pas une seconde fois : elle se réutilise. Une traduction validée ne dérive pas au fil des copier-coller successifs, parce qu’elle vient toujours du même registre. Et ce qui reste à traduire se mesure au lieu de se deviner : personne n’affirme que « c’est fait » sans preuve, personne ne découvre un trou après publication.
Aujourd’hui, cette mémoire vaut déjà pour 7 langues.
Ce qui sépare une bonne mémoire d’une mauvaise
Trois pièces décident si une mémoire de traduction sert vraiment, ou si elle s’effondre en silence sans que personne comprenne pourquoi : comment le texte est mis à plat avant d’être comparé, comment un même mot source se distingue selon l’endroit où il apparaît, et comment chaque rendu porte la preuve de qui l’a validé.
La normalisation
Une mémoire ne compare jamais deux textes lettre à lettre : elle compare deux empreintes, un condensé calculé sur le texte. Prise sur le texte brut, telle qu’il arrive, une empreinte rate tout sur une espace de trop, une ponctuation écrite autrement, ou un paramètre noté %s ici et {{nom}} là. Deux phrases qui se lisent à l’identique deviennent alors deux empreintes différentes, deux entrées sans rapport, et le taux de réutilisation s’effondre sans qu’on comprenne pourquoi. Le contrat fixe donc sept étapes, toujours dans le même ordre, appliquées à l’identique au moment d’écrire une entrée et au moment d’en chercher une.
Une chaîne, ou une erreur. Ce qui arrive doit déjà être du texte. Avant : un nombre ou un objet se glisse dans le lot par erreur de code. Après : rien n’est écrit, une erreur nomme l’entrée fautive, jamais un texte de repli du genre « undefined » qui finirait par polluer la mémoire en silence.
Mise en forme Unicode NFC. Une même lettre accentuée peut s’écrire de deux façons en octets, pour un résultat identique à la lecture. Avant : « café » avec un é en un seul caractère, et « café » avec un e suivi d’un accent posé séparément, deux suites d’octets. Après : une seule forme, toujours la même. La même confusion se produit, plus souvent encore, en arabe, en hindi et en bengali.
Les paramètres neutralisés. Le blanc variable d’une phrase s’écrit différemment d’un code à l’autre. Avant :
Bonjour {{prenom}},Bonjour %setBonjour $1arrivent de trois projets différents. Après : les trois donnentBonjour {1}, une seule entrée dans la mémoire, quelle que soit la notation d’origine.Tout blanc ramené à une espace, l’invisible supprimé. Avant : une tabulation, un retour à la ligne ou une espace insécable, chacune une forme de blanc différente. Après : une espace ordinaire, la même partout. Deux marques plus sournoises, l’espace de largeur nulle et les marques de sens d’écriture, ne sont pas remplacées mais supprimées d’un coup : invisibles à l’écran, elles feraient sinon échouer une comparaison sans que rien ne le laisse deviner.
Les espaces qui se suivent se réduisent à une seule. Avant : plusieurs espaces à la suite entre deux mots, copiées depuis un tableur ou un vieil export. Après : une espace, une seule, entre les deux mots.
Les espaces de tête et de fin sont coupées. Avant : une espace oubliée avant ou après le texte, invisible dans la plupart des éditeurs et pourtant bien présente dans le fichier. Après : le texte seul, sans rien qui dépasse.
La ponctuation finale se détache, et se garde à part. Le français ajoute souvent un deux-points précédé d’une espace insécable là où l’anglais n’en met pas. Avant : « Retour : » et « Return: » auraient produit deux entrées sans rapport. Après : la racine « Retour » est la même entrée dans les deux cas ; le « : » et l’espace qui le précède sont gardés à part, jamais perdus.
La clé de contexte
Une même phrase source ne veut pas toujours dire la même chose. « Retour » sur un bouton dit d’aller à l’écran précédent ; « Retour » dans un questionnaire de satisfaction parle d’un vécu qu’on raconte. Rien à voir. En anglais, le premier se traduit par « Back », le second par un tout autre mot. Une mémoire qui confond les deux ne se trompe pas à moitié : elle sert la même traduction aux deux emplacements, et personne ne le remarque à la relecture, parce que chaque rendu, pris isolément, a l’air juste.
C’est le rôle du contexte : une étiquette courte et facultative, en minuscules, du général au particulier, séparée par des points (bouton, titre, nav, formulaire.aide, formulaire.erreur, banniere, pied, etat). Vide, elle désigne le rendu qui convient partout ailleurs.
Chercher une phrase suit toujours le même ordre, et ce que renvoie la mémoire porte l’une de sept étiquettes.
| Étiquette | Ce que cela veut dire |
|---|---|
exacte | La source et le contexte demandés existent tels quels. |
exacte_neutre | La source existe au contexte neutre (vide), alors qu’un contexte précis était demandé. |
contexte_unique | La source n’existe que sous un seul contexte, et aucun contexte n’était demandé. Le résultat porte toujours ce contexte, nommé. |
casse | La source existe à la casse près, au contexte demandé. |
casse_neutre | La source existe à la casse près, au contexte neutre. |
ambigu | La source existe sous plusieurs contextes, et aucun n’a été précisé. |
absente | Rien n’est connu : l’entrée manque. |
La casse, majuscule ou minuscule, ne se fond jamais dans la comparaison principale : un intitulé de bouton ne s’écrit pas comme une phrase ordinaire en anglais, et confondre les deux ferait passer un titre pour une phrase courante. Elle n’intervient qu’en second rang, et se signale par sa propre étiquette.
ambigu n’est pas un échec. La réponse porte alors la liste complète des contextes disponibles et de leurs traductions : c’est à qui appelle de choisir. Rendre au hasard l’une des réponses possibles serait exactement la faute que ce contrat combat.
La provenance
Chaque entrée porte, langue par langue, d’où vient son rendu, quand il a été relevé, et ce qui l’a validé. Par langue, et pas par entrée entière : le rendu anglais d’une phrase peut venir d’une terminologie de référence quand son rendu bengali vient d’une relecture faite à l’ODERSA. Prétendre qu’une seule provenance vaut pour toutes les langues d’une même entrée mentirait sur l’une d’elles.
| Niveau | Ce qu’il atteste | Ce qu’il autorise |
|---|---|---|
| institution | Repris tel quel à une terminologie ou à une donnée de référence publique. | Sert dans un pack. |
| flotte | Déjà servi en production sur un site de l’ODERSA. | Sert dans un pack. |
| relecture | Relu et validé par une personne à l’ODERSA. | Sert dans un pack. |
| import | Importé d’un corpus ouvert, jamais relu. | Sert dans un pack, mais toujours signalé comme à relire. |
Le niveau import n’est pas caché : il est servi, et signalé partout où cela compte. Chaque entrée de ce niveau apparaît dans la liste des chaînes à relire du pack correspondant, et dans le bon de travail remis à qui appelle l’API. Sans ce signal, une valeur jamais relue se propagerait en silence à tous les sites qui s’en servent : c’est précisément ce que ce niveau, et son étiquette, existent pour empêcher.
Ce que cette mémoire contient vraiment
Ce que la mémoire porte se vérifie sur la provenance que chaque rendu déclare, langue par langue, jamais sur une promesse en l’air. Comptées sur ces provenances, toutes les entrées sont aujourd’hui de niveau flotte, déjà servies en production sur un site de l’ODERSA avant même d’entrer dans ce registre, sauf dix qui sont de niveau relecture, lues et validées une par une par une personne de l’ODERSA. Les deux comptes se refont directement sur les provenances que portent les entrées de la mémoire.
Aucune entrée, à ce jour, n’est de niveau import : pas une seule valeur qu’aucun humain n’aurait relue ne s’y trouve. Ce n’est pas un hasard de calendrier : la priorité donnée à la moisson de la flotte, déjà validée par sa propre mise en ligne, plutôt qu’à l’import de corpus non relus, explique ce zéro. Le jour où une valeur de niveau import y entrera, elle sera signalée comme telle, jamais mêlée au reste sans son étiquette.
Les 299 divergences
Rassembler ce que chaque site range pour la même phrase source a aussi révélé son envers. Le rapport de divergences daté du 19 août 2026 recense 299 cas où l’ODERSA, une seule maison, rend différemment la même chaîne source, entre cinq sites de la flotte et les deux composants qui leur sont communs, la bannière et le pied de page partagés.
Deux exemples concrets. Sur le bouton « Signaler une erreur », le site Avant les secours écrit en anglais Report an error, quand De plein droit et La Bibliothèque écrivent toutes deux Report a mistake : deux mots différents pour le même geste, chacun se lisant juste pris isolément, et que personne n’avait jamais vus côte à côte avant que cette mémoire ne les rassemble. En pied de page, en arabe, « Mentions légales » ressort en الإشعارات القانونية dans le pied commun de la flotte, et en البيانات القانونية sur quatre sites qui le portent chacun dans leur propre pied de page : quatre projets indépendants, d’accord entre eux, et en désaccord avec le composant censé leur être commun à tous.
Ce que cela révèle : chaque site a traduit pour lui-même, au moment de son propre chantier, sans regard sur ce qu’un autre avait déjà écrit pour la même phrase. Aucune des deux formulations n’est fausse prise seule ; c’est seulement une fois rassemblées, côte à côte, qu’on voit qu’elles ne devraient pas coexister. Sans un registre qui les recense toutes au même endroit, cette dérive reste invisible : chaque relecture se fait projet par projet, jamais flotte entière.
L’arbitrage entre deux formulations qui divergent est humain, jamais une décision automatique. Le rendu que la mémoire sert aujourd’hui pour une clé en désaccord est celui de la première source déposée dans l’ordre de traitement des adaptateurs : un ordre de calcul, pas un jugement de qualité. Choisir pour de bon lequel des deux mots garder demande quelqu’un qui connaisse le sens voulu à cet endroit précis. C’est un travail de relecture, mesuré et priorisable, jamais un calcul qu’un programme ferait à la place d’une personne.
C’est un argument pour l’existence même de ce projet. Sans mémoire commune, une flotte de 14 projets qui grandit ne peut pas savoir qu’elle se contredit elle-même : chaque site est relu pour lui-même, jamais contre ses voisins. Une fois mesurée, cette dérive devient un travail qu’on peut planifier, pas une réputation qu’on découvre par accident après coup.
Répartition par langue, mesurée sur le même rapport : arabe 47, bengali 71, chinois 60, espagnol 20, hindi 64, anglais 35, français 2.
Ce qu’elle ne contient pas
Rien qui vienne de la boîte de traduction. Rien qui vienne d’un autre traducteur automatique. Rien sans une source déclarée, datée, dont la licence a été vérifiée au fichier. Rien d’inventé pour combler un trou.
La première règle n’est pas une précaution parmi d’autres : c’est une frontière d’architecture, pas une préférence éditoriale. Une sortie de la boîte se déclare elle-même data-provenance="machine", sans détour ; la mémoire, elle, ne connaît que quatre provenances, celles du tableau ci-dessus, chacune tenue par une source déclarée, une date et un niveau. Une sortie de machine n’est ni une source, ni une date, ni l’un de ces quatre niveaux : elle n’a donc nulle part où entrer dans ce format, et rien dans la chaîne de construction ne la fait passer d’un côté à l’autre.
Une sortie de la boîte de traduction n’entre jamais dans la mémoire. La dette mesurée est le produit, pas un défaut : le corpus nomme ce qui manque au lieu de le combler.
Ce qui manque n’est pas caché : c’est le bon de travail que rend l’API à qui l’appelle. Une association qui sait précisément ce qui lui manque peut organiser une relecture ciblée sur ce point précis ; une association à qui l’on affirme que « tout est traduit », sans preuve, ne sait rien du tout.
À ce jour, 27 sources ont passé le contrôle de licence. Celles qui alimentent déjà la mémoire sont moins nombreuses, et ce sont celles que déclare /api/v2/sources.json : une licence vérifiée n’est pas encore un corpus moissonné.
Comment elle est rangée
Chaque entrée vit dans l’un de 256 fichiers, appelés des seaux, nommés en hexadécimal de 00 à ff. Le seau d’une entrée ne dépend que de sa chaîne source, jamais du contexte ni de la casse : toutes les variantes d’une même phrase, tous contextes et toutes casses confondus, vivent dans le même fichier.
Cela rend l’API économe d’une façon précise. Quel que soit le volume déposé dans la mémoire, aujourd’hui comme dans dix ans, chercher une phrase coûte UNE requête et rend une réponse complète, variantes de contexte et de casse comprises. Ce coût ne grandit jamais avec le contenu : il est plafonné par construction, pas par réglage.
Aujourd’hui, la mémoire porte 674 entrées, réparties sur 256 seaux. L’ensemble des fichiers de mémoire pèse 1576 Ko, copie complète tout.json comprise ; cette copie seule en pèse 768 Ko.
Un découpage aussi fin a un revers, et il est écrit sans détour sur l’API : moins d’entrées par seau, c’est un ensemble d’anonymat plus petit pour qui lit seau par seau. Ce revers ne touche jamais la boîte : elle n’appelle pas cette API et n’expose donc aucun numéro de seau ; il concerne un site tiers ou un outil qui interroge la mémoire depuis son propre code. À ce volume de corpus, le manifeste conseille donc de prendre la mémoire d’un bloc, et le fichier client suit ce conseil tout seul.
S’en servir sans être développeur
Cette section s’adresse à qui construit ou maintient un site, pas à qui veut simplement traduire un texte : pour cela, la boîte suffit, sans rien lire de plus. Trois portes, selon ce qu’il y a à faire.
- Télécharger des chaînes déjà prêtes, pour les poser dans un site : les packs de chaînes.
- Appeler la mémoire ou les packs depuis son propre site ou son propre outil : l’API, avec l’adresse, le format et des exemples à copier.
- Suivre la marche à suivre complète, de l’extraction des chaînes jusqu’à la relecture : la méthode.
Aujourd’hui, 7 packs sont déjà prêts à être téléchargés, 4718 chaînes en tout.
La licence
La mémoire de traduction, comme les glossaires et les pièges par langue, est publiée en données ouvertes sous licence Creative Commons Attribution 4.0 (CC BY 4.0). N’importe qui peut la copier, la republier, la croiser avec d’autres données, y compris dans un usage commercial, à trois conditions que pose la licence : citer l’ODERSA, indiquer si le contenu a été modifié, et joindre le lien vers la licence.
C’est ce choix qui fait de ce corpus une infrastructure, et pas un outil de maison. Une mémoire réservée à l’ODERSA resterait un outil interne parmi d’autres. Publiée, mesurée et ouverte, elle devient une pièce que n’importe quelle association ou n’importe quel site peut venir prendre sans rien demander à personne, plutôt que de tenir seul, dans son coin, le même registre.
Le détail des licences, fichier par fichier, et comment citer : les données ouvertes.
Corriger une entrée fausse
Une traduction qui sonne faux, un contexte mal choisi, une provenance qui ne colle pas : cela se corrige, et vite. Signaler une erreur ouvre un courriel déjà rempli avec ce qu’il faut pour corriger : la page, la chaîne en cause, ce qui est écrit, ce qui serait juste.
Pour aller plus loin : proposer une traduction qui manque, relire une entrée de niveau import, ajouter une source ou un adaptateur. Voir contribuer.