Clyde/Documents/JournalDeBord/i18n.md

46 lines
2.6 KiB
Markdown
Raw Normal View History

2024-03-01 17:44:56 +01:00
# 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
2024-03-02 20:06:43 +01:00
Les traductions seront rassembler dans fichier txt. Une langue sera présente par fichier et une
2024-03-01 17:44:56 +01:00
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.