1
0
forked from PGL/Clyde
Clyde/Documents/JournalDeBord/i18n.md
2024-03-02 20:07:16 +01:00

2.6 KiB

Internationalization (i18n)

L'un des critère du projet est de donner la possibilité aux utilisateur de choisir entre différentes langues. Minimum 2 sont a implémenter, le français et l'anglais.

Intention

La gestion des langue au niveau backend peut sembler être une bonne idée aux premier abord car celà permeterais de laisser la possibilité a différents frontend utilisant la meme api de traduction. cependant, peu d'éléments venant de la base de données sont traduisible. Nous alons alors opter pour une internationalization au niveau du frontend. Dans le cas ou un éléments venant du frontend devrait être traduit, Il suffirait alors de le faire traduire par le frontend directement

Implémentation

Le frontend va se voir équiper d'une collection de fonctions permettant la traduction. notament i18n(key: str) -> str qui prendrait en entrée une "clé" identifiant la traduction à aller chercher. Cette clé serait sous la forme : <context>.<element>. La fonctions retournera alors la traduction du texte dans la langue choisie par l'utilisateur. cette langue sera stockée dans les cookies pour qu'un utilisateur non enregistré puisse naviguer sur le site sans problèmes. Si l'utilisateur est enregistré elle pourra également être ajouter à son profil pour que la langue soit mise à jours lors de son prochain passage.

Base de données de traduction

Les traductions seront rassembler dans fichier txt. Une langue sera présente par fichier et une traduction par ligne. (Ce format semble être utilisé par certaines librairies de spring. Malgré le fait que nous ne l'utiliserons finalement pas, ce format semble efficace est facile à utilsier).

Chaque ligne commence par la clé. suivi immédiatement d'un "=". le contenu après ce égale est la traduction jusqu'au égale.

Considérations

  • Il existe certainemnt des librairies prète à l'emploi de traduction mais celà semble être relativement simple à implémenter manuellement.

  • Dans l'éventualité où nous voudrions implémenter des éléments au milieu d'une traduction (example: Veuillez vérifier votre addresse mail: tonitch@herisson.ovh puis revenir sur le site!). Dans ce cas nous pouvons utiliser le regex et simplement renseigner ces éléments par \1, \2, \3, ... puis créer une fonction qui s'occuperais de remplacer ces éléments dans le texte avant de le mettre en avant.

  • Il ne devrait pas etre trop compliqué d'écrire un script qui vérifie que toutes les traductions sont présente dans tout les fichiers en vérifiant que toutes les clés d'un fichiers sont présente.