(01-03-2013, 09:04 PM)Zappada a écrit : En les enregistrant dans des fichiers textes plutôt (pour moi, à faire, c'est pareil, voir peut-être même plus simple), c'est une bonne idée ? Enregistrer dans des fichiers est-il plus rapide que dans une BDD ?
Non, mais dans le cas présent, l'enregistrement est rare, donc cela n'influera pas les performances. En revanche, si les fichiers sont compilés dans le langage-cible (php, ruby, etc), leur chargement sera bien plus rapide que de passer par la BDD.
Les fichiers textes, pourquoi pas, mais c'est non-sémantique (0 balisage).
les fichier PO/MO, pourquoi pas, je ne connais pas, donc je ne peux pas juger.
Le XML compilé ensuite en *.php a l'avantage d'être très souple (c'est du XML), sémantique (XML est balisé), poly-lingual (unicode possible sans soucis), à jour (le w3c s'en occupe), "translangage" (php, javascript, ruby, etc savent tous lire un xml, donc on peut l'y manipuler).
L'atout d'avoir un XML réside également dans la possibilité de faire traiter la traduction soit pas le serveur (j'ai un XML contenant les traduction, le serveur le compile en *.php, et s'en sert pour traduire la page AVANT de l'envoyer au client), ou par le client (un javascript va chercher le fichier XML de traduction, s'il n'a pas été modifié il n'est pas re-téléchargé car le navigateur l'a en cache, le javascript le lit grâce aux XMLHttpRequest et XMLResponse, et change les noms de localization par leur traduction dans la page une fois téléchargée).
Le principe est bon, néanmoins, tu peux probablement l'améliorer: au lieu de considérer que le texte d'origine (français) est traduis en d'autres langues, tu peux considérer que le concept de "texte" est "instancié" par une traduction, y compris le français. En ce cas, tu auras, dans la BDD, une table de type:
-Identifiant_concept_texte- -Identifiant_Langue- -Texte-
La première colonne est un identifiant du texte à afficher, la 2e est l'identifiant de la langue de la traduction, et Texte, le texte traduis. Si tu cherches la traduction d'un texte d'identifiant donné, tu le pioche dans ta table à partir du couple "identifiant du texte / identifiant de langue". Si l'entrée n'existe pas, tu te rabat sur une autre langue, "par défaut". Si elle n'existe pas non plus, tu prends la 1ere traduction disponible.
Dans mon cas, j'ai utilisé un système très similaire, basé sur XML/PHP, et détaillé dans le topic sur le stockage du texte hors des vues.