Entrées par Jean-Paul

Multilingue: comment gérer efficacement les clés de traduction ?

Le développement de Cap Collectif, qui compte près de 200 clients, nous amène aujourd’hui à travailler à l’international et donc à rendre notre tech accessible dans différentes langues. L’un des problèmes majeurs que cette transition implique est la gestion des clés de traduction : les clés utilisées jusqu’alors dans une même langue n’impliquent aucun coût supplémentaire en cas de redondance de l’information traduite. En revanche, traduire une plateforme requiert souvent des prestations extérieures chiffrées sur la base du nombre de mots à traduire, auquel cas traiter la redondance des clés de traduction devient un réel enjeu budgétaire.

Par exemple, à Cap Collectif, nous avons décidé de nous pencher sur ces fameuses clés de traduction en constatant que nous étions censés traduire 22 462 mots, un chiffre bien plus élevé que ce que nous pensions… Un rapide état des lieux confirme notre intuition : 34 clés de traduction avec pour valeur “Annuler”, 42 clés avec pour valeur “Confirmer”… Un travail de nettoyage s’impose !

Cependant, plus votre plateforme est conséquente, plus le besoin de repasser sur les clés de traduction est fort, plus cette tâche peut paraître insurmontable (en plus de ne pas être très attractive). 

Rassurez vous, vous n’aurez pas besoin de maltraiter un jeune stagiaire en lui assignant cette tâche (et vous n’auriez pas dû ne serait-ce qu’y penser bien entendu 😉 ). Nous allons voir au cours de cet article comment Cap Collectif a décidé de résoudre ce problème en automatisant l’analyse des clés de traduction et en prévenant l’ajout de nouvelles clés de traduction aux valeurs existantes.

Nettoyer votre plateforme des doublons

Extraction des clés de traduction

extraire des clés de traduction

Un doublon est caractérisé par deux clés de traduction ou plus ayant une même valeur. Afin de conserver une modularité des traductions de la plateforme, il peut être parfois utile de dupliquer les clés ayant un même valeur. Aussi, il nous faut autoriser un nombre maximum de références différentes pointant vers une même valeur. Toutefois, des clés de traduction telles que “Annuler” ou “Confirmer” n’ont aucun intérêt à être dupliquées et ne feront qu’ alourdir votre devis final. 

Dans le but de repérer de façon programmable ces doublons, il vous faudra dans un premier temps récupérer vos traductions en local si ce n’est pas déjà le cas afin de limiter le nombre d’appels réseaux réalisés. 

Une fois ceci accompli, votre programme devra lire ligne par ligne les clés de traduction existantes et leurs valeurs associées dans le fichier correspondant à la langue par défaut (supposé comme le plus complet pour des raisons de simplicité et de performance). Cette étape requiert un moyen de récupérer la donnée intéressante dans la ligne, c’est pourquoi nous avons décidé d’utiliser des Regex.

Regex utilisée pour récupérer la clé de traduction et sa valeur associée. La simplicité des regex s’explique par le formatage des fichiers de traduction.

A ce niveau de notre script, nous n’avons  trouvé que le  moyen d’extraire les clés de traduction du fichier dans des variables. Cette étape va alors nous servir à stocker les clés de traduction dans une structure qui permettra de mettre en avant les répétitions d’information. Nous avons donc choisi d’exploiter la structure particulière des Map (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) en Javascript. Nous stockerons ainsi la valeur de traduction en tant que clé dans cette Map, tandis que la valeur de cette entrée sera les clés de traduction faisant référence à cette valeur (inversion clé/valeur pour bien mettre en évidence que nous mettons en avant à présent la valeur des traductions comme élément de référence).

Classification des clés de traduction

Comme vu dans la section précédente, nous allons stocker dans une Map les valeurs de traduction et les clés qui y sont associées. L’objectif final étant de nous débarrasser des doublons, il nous faut penser à stocker des informations concernant la position de ces clés de traduction dans le code de la plateforme. Vous pouvez à ce niveau récupérer l’ensemble des informations qui vous permettront de retrouver rapidement la position des clés de traduction en cas de réécriture du fichier (comme le nom du fichier par exemple).

Traitement des clés de traduction

Une fois votre Map entièrement remplie, vous pouvez demander à votre programme de réécrire automatiquement les fichiers avec la première clé de traduction…

J’ai choisi personnellement d’attendre l’analyse complète des clés de traduction avant de décider de réécrire les fichiers. Cette solution a pour avantage d’éviter une multitude de réécriture sur un fichier si une clé de traduction est fréquemment répliquée. En revanche, le temps d’attente est plus élevé que si vous décidez d’attendre simplement qu’un seuil de nombre de réplications pour une clé donnée soit dépassé.

… ou de choisir une clé parmis les clés existantes …

… et/ou de demander à l’utilisateur d’entrer une nouvelle clé qu’il aimerait utiliser.

Réécriture manuelle de l’ensemble des clés de traduction à partir de la clé de traduction entrée par l’utilisateur

La solution retenue dépendra de votre projet et de son état actuel. Je vous recommande malgré tout une première passe sur votre code de façon automatisée devant la quantité de modifications qui pourrait être nécessaire. La réécriture en elle-même se base également sur les RegEx et reste sensiblement proche de la détection des clés de traduction. Pensez toutefois à ce niveau à enregistrer l’ensemble de vos ajouts/modifications/suppressions de clés de traduction dans des fichiers avant d’avoir un historique des manipulations effectuées pour pouvoir rétablir la situation en cas de conflits ou erreur du programme (back-ups).

Analyse des résultats

Vous avez supprimé les doublons et les clés de traduction inutilisées de votre projet et vous vous félicitez d’être passé de 22 462 à 10 044 mots grâce à votre programme. Cependant, un petit tour sur votre plateforme vous donne froid dans le dos : de nombreuses clés de traduction ne sont plus traduites. Vous gardez votre sang froid et décidez d’analyser les clés de traduction manquantes. Rapidement, vous vous rendez compte que ces clés de traduction sont générées “à la volée”: concaténation de chaînes de caractères, traduction d’une variable… Votre programme ne peut décemment pas détecter ce type de cas. 

Heureusement, nous pouvons maintenant utiliser les back-ups de l’étape précédente pour restaurer les clés de traduction manquantes. Cette tâche est la plus chronophage de toutes car elle nécessite que votre équipe de testeurs vous remonte l’ensemble des clés manquantes. Si vous ne disposez pas d’une équipe suffisamment importante, vous pouvez décider de ne pas supprimer les clés de traduction, mais simplement de vous occuper des doublons afin de limiter fortement les risques. C’est ainsi, qu’après rétablissement des “faux-positifs”, nous atteignons finalement 15 851 mots. Ce résultat, beaucoup moins impressionnant que le précédent représente toutefois une réduction de 30% des mots de plateforme.

Prendre des bonnes habitudes

Après avoir réalisé la prise de risque que représente la modification/suppression des clés de traduction, vous voulez sûrement éviter d’avoir à réitérer l’opération fréquemment. Alors que le script précédemment écrit peut servir à réaliser une analyse de la plateforme (que vous pouvez inclure à votre CI en levant des exceptions lorsqu’un seuil de duplication est dépassé), son temps d’exécution ne lui permet pas de s’inscrire dans un usage quotidien. Deux axes d’améliorations sont possibles pour contrôler l’évolution des clés de traduction de votre plateforme.

Prévenir l’ajout de nouveaux doublons

Vous pouvez alors compléter l’utilité du script précédemment écrit avec un Git hook (https://githooks.com/). Ce pre-commit hook aurait pour but d’analyser les clés de traduction présentes dans les fichiers ajoutés par un développeur. Une clé de traduction est repérée différemment selon l’outil de traduction utilisé (dépendant souvent du type de fichiers).

Regex de détection d’ajout de clé de traduction dans un fichier JS ou PHP

En cas de nouvelle clé-doublon, il vous suffira de lancer une erreur. Celle-ci se caractérise par l’absence de cette clé en dehors des fichiers modifiés.

Insister sur les bonnes pratiques lors des revues de code

Il convient bien entendu de pousser également les développeurs à utiliser des “bonnes pratiques” pour les clés de traduction comme l’interdiction d’utiliser des variables en tant que clé de traduction ou alors, le cas échéant, passer cette variable à une fonction énumérant les clés de traduction possibles. De cette façon, les clés seront inscrites dans un fichier et deviendront détectables par votre script.

Conclusion

La gestion des clés de traduction se révèle être un véritable défi, plus encore lorsque le contrôle de celles-ci est réalisé tardivement. De simples mesures comme un pre commit Hook permet de prévenir la réplication des clés de traduction de façon pérenne et d’économiser un devis parfois lourd. Maintenant que vous avez les outils en main, n’hésitez plus, faites comme Cap Collectif et prenez le contrôle de vos clés de traduction !