Bonjour,

Pour le contexte : je persévère dans la création d'un CMS maison en m'inspirant essentiellement de WordPress (oui je réinvente la roue). Smiley rolleyes

Je viens de finir la gestion des tags d'un article qui s'ajoutent à la manière de ce qu'on peut trouver sur un éditeur WordPress ou sur les Pens de CodePen. Ça fonctionne impeccable côté front comme côté back (merci à ChatGPT pour son assistance).

Pour vous permettre de visualiser un peu voici ce que ça donne en front : un CodePen.

Pour un tag dénomé ainsi : "Cercle des poètes disparus"
Son slug sera : "cercle-des-poetes-disparus"

J'en viens maintenant à ma question existentielle : comment envisager une internationalisation des tags ?
Par soucis de cohérence les traductions différentes d'un tag devraient-elles dans l'idéal ne s'appuyer que sur un unique slug en anglais ? Par exemple : "dead-poets-society" ?

Je ne sais pas trop comment aborder ce problème...
Modérateur
Salut,

Un tag est dans une table tags dont la jointure est forcément n*n (ManyToMany) avec la table posts. Pour internationaliser, tu dois avoir une table languages. Ce qui veut dire que dans table tags, tu as une jointure n*1 (foreign key).

N'hésite pas à utiliser Dia ou MySql workbench ou navicat (payant) pour créer tes schemas de base de données
Modifié par niuxe (24 May 2024 - 12:33)
Bonjour Niuxe,

Alors, ça, c'est ce que je fais déjà :
niuxe a écrit :
Un tag est dans une table tags dont la jointure est forcément n*n (ManyToMany) avec la table posts.

Et là par contre, si tu as un bout d'exemple je suis preneur (ou même juste un lien vers de la documentation) :
niuxe a écrit :
Pour internationaliser, tu dois avoir une table langages. Ce qui veut dire que dans table tags, tu as une jointure n*1 (foreign key).

Une clef étrangère, je sais ce que c'est, je les utilise. Je ne bloque pas sur le plan technique, mais bien plutôt j'hésite sur l'architecture à adopter.
Modifié par Olivier C (24 May 2024 - 12:57)
Salut,

@niuxe Sympa ce site pour faire et partager des diagrammes Smiley lol

@Olivier C
Je crois que dans la table tags il faudrait mettre lang_id dans la clé primaire pour pouvoir facilement associé les traductions d'un même tags.id dans plusieurs langues.

Table tags {
  id integer [primary key]
  lang_id integer [primary key]
  name varchar
}
=>
id: 1 
lang_id: 1
name: Bonjour

id: 1
lang_id: 2
name: Hello

Modifié par Mathieuu (29 May 2024 - 11:10)
Bonjour Mathieuu, merci pour ton intervention.
Mathieuu a écrit :
Je crois que dans la table tags il faudrait mettre lang_id dans la clé primaire pour pouvoir facilement associer les traductions d'un même tags.id dans plusieurs langues.

J'avoue ne pas avoir bien compris. Ce serait plus simple de requêter sur une colonne faisant partie de la clé primaire ? Si oui comment-ça ?
Une clé primaire doit forcement être unique.
Si tu ne mets que l'id du tag dans la clé primaire, tous tes id seront forcement différents :
id: 1 
lang_id: 1
name: Bonjour

id: 2
lang_id: 2
name: Hello

Et dans ce cas la tu ne pourras pas facilement dire que l'id 2 c'est la traduction de l'id 1 dans la langue 2 (ou du moins je ne vois pas comment ..)

Si tu mets l'id et l'id de la langue dans la clé primaire, la contrainte d'unicité s'appliquera au binome de valeur par exemple : (1 1) (1 2) (1 3) (2 1) (2 2) (2 3)... , ce qui te permet d'avoir plusieurs fois l'id 1 et l'associé à chacune des langues.

En gros cela permet d'obtenir toutes les traductions du même tag en faisant une requête simple :
select * from tags where id = 1 


(Après je suis pas sur d'avoir compris ce que tu veux faire Smiley sweatdrop )