46 lines
2.6 KiB
Markdown
46 lines
2.6 KiB
Markdown
|
# 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 rasembler 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.
|