Laravel 6

Site multilingue et bases de données

Avatar de michelange2008
michelange2008

Bonjour, Je suis en train de faire un site destiné à être multilingue. Tous les textes sont donc dans les fichiers php des répertoires lang (fr, en, de, pour l'instant). Mais comment faire pour les infos qui sont en base de donnée et susceptibles d'être traduites. Par exemple, j'ai une table avec une liste d'espèces: ovins, caprins, bovins, chevaux, ânes. Une idée pour la traduction serait de mettre dans cette table la clef correspondant à l'espèce que l'on trouverait dans le fichier especes.php des trois répertoires fr, de et en. Ainsi dans la base de donnée on aurait une valeur 'sheep' et dans les especes.php on trouverait à chaque fois la ligne suivante:

'sheep' => 'ovins' (pour le français)
'sheep' => 'sheep'
'sheep' => 'Schafe'

et dans les vues, au lieu d'écrire $espece on écrirait @lang('especes.'.$espece)

Que pensez-vous de cette solution ? Y-a-t'il d'autres façons de faire plus correctes ou plus élégantes.

Merci

Posté il y a 7 mois
Avatar de bestmomo
bestmomo

Salut,

Ce package pourrait peut-être faire le job.

Posté il y a 7 mois
Avatar de michelange2008
michelange2008

Salut Bestmomo,

Merci pour ta réponse rapide... mais il me semble que le lien qui tu me proposes fait plutôt que le contraire de ce que je cherche, c'est-à-dire qu'il stocke les traductions (les fichiers php des sous-répertoires lang) dans une base de donnée.

Posté il y a 7 mois
Avatar de nash
nash

Salut,

Serait-il possible que tu m'explique un peux ton idée du multilangue. Pour ma part les fichier de lang sont la pour les données statiques dans le genre (Rechercher,Search,...) via un identifiant dans un tableau associatif selon la local en vigueur

Ensuite les differents packages pour la realisation de stokage de données translatées en db sont la pour le coté dynamique. Tu as aussi la possibilité de le faire toi meme, c'est simple avec laravel.

Posté il y a 7 mois
Avatar de michelange2008
michelange2008

Salut Nash,

Merci pour ta question.

Je suis en train de faire un site pour un laboratoire de parasitologie vétérinaire et il y a des infos statiques qui sont stockées en base de donnée: la liste des analyses disponibles, la liste des espèces conncernées, etc. Ces données sont statiques mais stockées en base de donnée (et non pas en fichiers json par exemple) pour profiter des propriétés relationnelles d'une bdd. Ainsi il y a des tables pivot entre les la liste des analyses et la liste des espèces. Et ce n'est qu'un exemple.

Il me faut donc pouvoir proposer une traduction des ces données statiques stockées en bdd.

C'est pour cette raison que j'avais envisagé la solution que j'ai présentée plus haut. Comme je ne pense pas être le premier à être face à cette question, je me demandais comment elle était généralement résolue.

Suis-je compréhensible ?

Merci et bonne journée

Michel

Posté il y a 7 mois
Avatar de michelange2008
michelange2008

Et j'ai d'ailleurs une question identique avec les textes produits par javascript: Comment traduit-on automatiquement le texte des fenêtres "alert" ?

Une solution serait de mettre le texte de ces fenêtres comme atttribut de balises html. En générant la page, laravel applique la bonne langue et il n'y plus qu'à récupérer le texte en jquery avec un truc du style $('#js-text).attr('titre')

Cela me parait un peu du bricolage, mais je n'ai pas trouvé d'autres idées.

Là encore, je pense que je ne suis pas le seul à avoir ce problème.

Merci pour vos idées

Posté il y a 7 mois
Avatar de nash
nash

Salut,

En reponse de ton premier post:

Il y a une certaine confusion dans ton exposé. Tu emplois le terme statique pour des données en db et je comprends cette mauvaise définition. La seule question que je pose : Demain lorsque tu ajoute une nouvelle espèce tu fais comment ?

Je pense que tu as un réel defi pour rendre les données translatablent avec une modification du schéma de db et la première idée de Bestmomo me parait la meilleure.

Pour ton deuxieme post.

Cela va dependre de pas mal de choses qui sont dans le même registre que ton premier post. Si tu as des messages en dur(pour remplacer le terme statique) dans ta vue, le fichier conf me parait être la meilleur solution.

Posté il y a 7 mois
Avatar de michelange2008
michelange2008

Bonjour,

Merci de ta réponse. Il y a peut-être de la confusion dans mon exposé mais pas dans mes idées. Si certaines données "statiques" (je ne sais pas quel autre terme employer) sont en base de donnée c'est que j'ai besoin des fonctionnalités d'une base de donnée en terme relationnel. Ce ne sont pas de données susceptibles d'être modifiées en permanence par l'utilisateur final. Si un jour j'ai besoin d'ajouter une nouvelle espèce, que la donnée soit en bdd ou dans un fichier (type json) le travail sera le même. L'idée de Bestmomo ne correspond pas à ma demande. Le package dont il a mis le lien fait le contraire: il stocke en base de donnée les traductions habituellement présentes dans laravel sous forme de fichiers dans les sous-répertoires du répertoire resources/lang.

Posté il y a 6 mois

Vous ne pouvez pas répondre à ce sujet.