Aller au contenu principal

Suivi des traductions

Une traduction manquante se voit : il n'y a rien. Une traduction obsolète, non : le texte est là, il se lit bien, mais il ne dit plus la même chose que la source. Rien dans les fichiers ne la distingue d'une traduction à jour.

Avec une sourceLocale, Hermes enregistre pour chaque clé traduite une empreinte du texte source d'origine. Quand la source change, chaque langue qui l'avait traduite est signalée.

hermes.config.js
export default {
sourceLocale: 'fr',
completeLocales: ['en-US', 'de', 'es-ES'],
};

completeLocales liste les langues censées contenir toutes les clés (toutes par défaut). Les autres sont considérées comme partielles volontairement : on ne leur reproche jamais une clé manquante. Le suivi s'applique quand même à elles : une langue partielle qui avait traduit un texte est prévenue quand il change.

Commandes​

hermes todo <locale> # ce qu'il reste à faire pour une langue, en JSON
hermes lock [locales...] # verrouiller un projet ou une nouvelle langue (toutes par défaut)
hermes lock <locale> --keys a,b # accepter une modification de la source sur certaines clés
hermes check # mêmes vérifications que le build, avec un code d'erreur pour la CI

hermes build signale les mêmes problèmes sous forme d'avertissements, les traductions obsolètes en premier : une traduction manquante retombe visiblement sur une langue de repli, alors qu'une traduction obsolète est servie comme si elle était à jour.

hermes todo donne, pour chaque entrée obsolète, la nouvelle source et la traduction actuelle : retoucher coûte moins cher que réécrire.

Le fichier de verrouillage​

Les empreintes sont stockées dans <localesDir>/.hermes-lock.json, à versionner avec le projet. Chaque entrée contient deux empreintes, source:cible : le texte d'origine de la traduction, et la traduction elle-même.

locales/.hermes-lock.json
{"de": {"settings:antiraid.closeDm": "a1b2c3d4e5f6:9876543210ab"}}

La seconde empreinte permet au build de distinguer une régression d'une correction :

  • la source a changé, pas la traduction : personne n'a encore répondu, la clé reste signalée ;
  • les deux ont changé : quelqu'un a répondu, et hermes build met l'entrée à jour tout seul.

Une passe de traduction ne demande donc aucune commande de plus. Commitez le fichier de verrouillage mis à jour avec les traductions. hermes check le lit tel qu'il est commité et n'écrit jamais : un verrouillage oublié fait échouer la CI au lieu de passer en silence.

Quand utiliser hermes lock​

hermes lock sert à deux choses :

  • verrouiller un projet ou une nouvelle langue pour la première fois. Le build ne met à jour que les langues déjà verrouillées : verrouiller automatiquement un projet qui ne l'était pas marquerait tout comme à jour dès le premier build, traductions obsolètes comprises, et plus rien ne serait jamais signalé ;
  • accepter une modification de la source sans retraduire. Une correction cosmétique de la source (une faute, un accent) signale toutes les langues, ce qui est souvent voulu puisqu'elles ont peut-être la même erreur. Quand ce n'est pas le cas, hermes lock <locale> --keys <clés> accepte le changement sur ces clés seulement.