Sephi-Chan a écrit :Concernant le système de BdD, comment formeer la requête pour que ça ne sélectionne que le nom anglais ?Si on part sur un système «fait maison» avec les tables que je t'ai indiquées, une simple jointure externe te permet de tout récupérer
Par exemple (en reprenant les tables que j'ai données précédemment) pour récupérer les objets d'ID 1 et 2 :
Code :
SELECT
objets.*,
objets_i18n.nom aSi18n_nom
FROM objets
LEFT OUTER JOIN objets_i18n
ON objets.id = objets_i18n.id
AND objets_i18n.langue = 'en'
WHERE objets.id IN (1,2)
Code :
id nom valeur i18n_nom
1 couteau 41 knife
2 papier 5 NULL
En compliquant un tout petit peu la requête à coup de IF, tes données deviennent totalement équivalentes à la version sans localisation, la traduction se fait de manière totalement transparente :
Code :
SELECT
objets.id,
IF(objets_i18n.nom IS NULL, objets.nom, objets_i18n.nom) AS nom,
valeur
FROM objets
LEFT OUTER JOIN objets_i18n
ON objets.id = objets_i18n.id
AND objets_i18n.langue = 'en'
WHERE objets.id IN (1,2)
Code :
id nom valeur
1 knife 41
2 papier 5
Bilan :
- Nombre de requête identique (aucune différence de perf)
- Code final identique (le format des données de sortie ne change pas)
--> Localisation transparente
Et au niveau liberté pour tes joueurs c'est bien plus sympa, au lieu d'avoir deux petites communautés, tu en auras une seule grande, un poil plus pratique tout de même, et bonjour le gain de place par rapport à la duplication des données sur deux bases différentes (sans compte toutes les galères que cette dernière solution pourrait apporter, en particulier le fait de devoir d'un coup vraiment gérer deux sites au lieu d'un seul)
Ressources [PHP][MySQL][prototype.js]