Collez le message d’origine dans « Message ICU de source » et sa traduction dans « Message ICU de traduction ». Les deux chaînes sont lues comme des messages ICU MessageFormat, leur structure est comparée, et chaque constat s’affiche sur sa propre ligne, préfixée OK, CHECK ou ERROR.
Les trois compteurs au-dessus de la liste indiquent combien d’arguments chaque message déclare et combien de constats ont été relevés. Tout est analysé dans ce navigateur : rien n’est téléversé et la page continue de fonctionner hors ligne une fois chargée.
Les arguments sont appariés par nom entre les deux messages. Un argument présent uniquement dans la source est un ERROR, un argument présent uniquement dans la traduction est un CHECK, et si le même nom porte un type différent — plural d’un côté, number de l’autre — le rapport émet un CHECK en nommant les deux types.
Pour les arguments select, les clés de branche sont comparées une à une : une branche perdue ou ajoutée dans la traduction est signalée avec son nom. Les arguments plural et selectordinal doivent conserver une branche other, dont l’absence est un ERROR attribué au côté qui l’a perdue. Les messages imbriqués dans une branche sont analysés récursivement, leurs arguments sont donc comptés aussi.
Les branches plural et selectordinal ne sont pas comparées une à une : une source avec one/other face à une traduction qui n’a que other est déclarée compatible. Le vérificateur ne lit pas non plus le texte traduit, ne contrôle pas les catégories de pluriel exigées par la langue cible (few, many…), et ne rend pas le message avec des valeurs.
Un rapport vert signifie donc seulement que les deux messages déclarent les mêmes arguments et les mêmes branches select. Rendez les deux avec votre bibliothèque de production avant publication, en tenant compte des règles de pluriel de la langue cible.
L’analyseur lit les arguments {name}, les arguments plural, selectordinal et select avec leurs branches, offset:N dans un en-tête plural, les messages imbriqués, le marqueur # dans les branches plural, et l’apostrophe : deux apostrophes représentent une apostrophe littérale, une seule ouvre et ferme un texte protégé. Les types number, date ou time sont enregistrés par leur nom, un squelette comme {value, number, ::percent} est donc accepté.
Un message illisible interrompt l’analyse par un ERROR au lieu d’un rapport : une { non fermée, une } sans partenaire, une apostrophe non fermée, un nom d’argument qui ne commence pas par une lettre ou un souligné, ou une branche non suivie de son bloc { … }.