# 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.
