09-05-2008, 09:14 PM
J'avais ouvert un sujet sur la question qui s'était révélé très intéressant (car apportant plein de réponses de divers intervenant). Il serait intéressant d'en faire la synthèse.
El[u]ox t'as donné une piste pour le contenu statique. Je vais t'en donner une pour le contenu dynamique.
Imaginons que tu travailles sur un jeu de rôle où es joueurs peuvent avoir des objets. Tu as donc une table objets avec les champs suivants :
Il faudra donc traduire le champ Nom.
Pour cela, il faudra une table d'internationalisation : nommons-la objets_i18n qui contiendra les champs :
Admettons ensuite que tu ai 2 objets dans ta table objets :
Ta table de localisation contiendra alors quelque chose comme cela :
Chaque objet peut donc avoir plusieurs traduction, différenciée par une locale (fr pour le français, es pour l'espagnol, en pour l'anglais, etc. Tu peux avoir autant de langue que tu le souhaites.
Ainsi, la traduction est transparente (le champ garde le même nom : nom). La locale (en) est donnée par une variable de session par exemple (que tu auras déterminé précédemment).
S'il n'y a pas de traduction pour cet objet ou pour cette langue, alors le nom par défaut (celui indiqué dans la table objets sera utilisé, le jeu reste ainsi utilisable même si tout n'est pas traduit.
Sephi-Chan
El[u]ox t'as donné une piste pour le contenu statique. Je vais t'en donner une pour le contenu dynamique.
Imaginons que tu travailles sur un jeu de rôle où es joueurs peuvent avoir des objets. Tu as donc une table objets avec les champs suivants :
- Id (clé primaire)
- Nom
Il faudra donc traduire le champ Nom.
Pour cela, il faudra une table d'internationalisation : nommons-la objets_i18n qui contiendra les champs :
- Id
- Nom
- Langue
Admettons ensuite que tu ai 2 objets dans ta table objets :
- 1, Heaume de bataille de porteguerre
- 2, Lames d'épaules de destructeur
Ta table de localisation contiendra alors quelque chose comme cela :
- 1, Warbringer Battle-Helm, en
- 1, Yelmo de batalla belisario, es
- 2, Destroyer Shoulderblades, en
Chaque objet peut donc avoir plusieurs traduction, différenciée par une locale (fr pour le français, es pour l'espagnol, en pour l'anglais, etc. Tu peux avoir autant de langue que tu le souhaites.
Code :
SELECT O.id,
IF(O2.nom IS NULL, O.nom, O2.nom) AS nom
FROM objets O
LEFT JOIN objets_i18n O2 ON O2.id = O.id AND O2.langue = 'en';
Ainsi, la traduction est transparente (le champ garde le même nom : nom). La locale (en) est donnée par une variable de session par exemple (que tu auras déterminé précédemment).
S'il n'y a pas de traduction pour cet objet ou pour cette langue, alors le nom par défaut (celui indiqué dans la table objets sera utilisé, le jeu reste ainsi utilisable même si tout n'est pas traduit.
Sephi-Chan