Un blog qui vérifie ses propres traductions
Ce blog compte 64 billets en onze langues : 704 lignes et environ 2,2 millions de caractères. Aucun billet ne manque dans aucune langue — une affirmation qui ne veut dire quelque chose que si quelque chose l'impose.
Quelque chose l'impose. Avant qu'une ligne traduite ne soit écrite, elle est vérifiée contre l'original anglais, et une ligne qui échoue n'est pas écrite du tout — elle est signalée et laissée à un humain.
À quoi sert chaque vérification
Les mêmes cibles de liens. Un chemin interne ne doit pas changer à la traduction : /privacy reste /privacy dans toutes les langues, et le préfixe de langue n'est ajouté qu'au rendu. Un traducteur — humain ou non — qui localise obligeamment un chemin produit un lien qui ne mène nulle part.
Les mêmes marqueurs. Certains billets portent des chiffres substitués lors de la construction de la page, pour qu'ils ne vieillissent pas. Une traduction qui en perd un perd un chiffre ; une qui en invente un produit une accolade au milieu d'une phrase.
Le même nombre par balise. Pas seulement des balises équilibrées — le même nombre qu'en anglais. C'est la vérification qui mérite sa place : une ligne de tableau perdue, une puce avalée ou un diagramme manquant sont invisibles à tout autre test, car le résultat reste du HTML valide qui se lit parfaitement.
Une longueur dans une plage. Entre la moitié et deux fois et demie l'anglais. Les langues diffèrent vraiment en longueur, la plage est donc large ; ce qu'elle attrape, c'est une traduction qui s'est arrêtée à mi-chemin.
Ce qu'elle a attrapé, et ce qu'elle a attrapé à tort
Une vraie prise : une traduction française est arrivée avec quatre mots mis en valeur là où l'anglais en avait trois, parce qu'une négation avait été balisée en deux morceaux. Rien ne semblait faux. Le compte, si.
Deux fausses alertes, le même jour, toutes deux instructives.
La première : un billet cite une ligne de CSS, et le CSS se termine par }}. La vérification des accolades comptait chaque {{ et chaque }}, si bien que toute traduction de ce billet échouait alors que rien n'était cassé. Un }} sans {{ ne peut pas être un marqueur cassé — les marqueurs commencent par {{ — donc seul le côté ouvrant est compté désormais.
La seconde : <rect/> et <path/> n'ont pas de balise fermante, un test d'équilibre les signale donc comme déséquilibrés à jamais. Les éléments vides sont maintenant comptés plutôt qu'équilibrés.
Les deux ont coûté un tour de travail, et les deux étaient une vérification trop stricte plutôt que trop lâche. C'est le meilleur sens dans lequel échouer, mais ce n'est pas gratuit : une vérification qui crie au loup est relâchée par celui qui est pressé, et elle n'est alors plus là quand cela compte.
L'essai qui comptait le plus
Quand les billets ont reçu des diagrammes, la vérification des balises a été étendue pour les couvrir. Plutôt que de s'y fier, la vérification a été testée : un diagramme a été supprimé exprès d'une traduction et l'importateur a été lancé.
Il a signalé exactement ce qui manquait — le diagramme, ses dix libellés, ses quatre rectangles, ses sept tracés — et a refusé d'écrire la ligne. Le diagramme a été rétabli et la vérification est repassée.
Cela a pris deux minutes. Une vérification qu'on n'a jamais vue échouer est une vérification qu'on suppose, et supposer est précisément ce que tout cela existe pour éviter.