Méthode d'internationalisation - SQL/NoSQL - Programmation
Marsh Posté le 27-08-2010 à 22:58:00
Perso, la deuxième.
Marsh Posté le 30-08-2010 à 09:09:16
La deuxieme m'a l'air la meilleure solution aussi.
La perte de performance ne sera pas vraiment significative pour toi car le server va d'abord chercher l'id et puis n'aura plus qu'a choisir entre quelques langues.
Ca ne deviendra problematique que si tu as des centaines de langues differentes.
Marsh Posté le 30-08-2010 à 09:46:08
forcément la 2ième, les tables MySQL sont limitées à 1000 colonnes. Donc si t'as plus de 1000 libellés, t'es mort avec la 1ère solution.
Cela dit, pour la 2ième solution, je ne suis pas convaincu de l'utilité de la 1ère table de langues. Tu mets un char(2) pour le champ langue dans la 2ième table et la clé primaire est portée par les champs "id" + "langue".
Marsh Posté le 30-08-2010 à 10:58:48
Laisser le label de la langue dans la deuxieme table serai redondant (avec tout les problemes qui en decoulent), pour que le schema soit normalisé il faut avoir les deux tables.
Marsh Posté le 30-08-2010 à 13:06:27
Je pensais plus à mettre uniquement l'indicatif (fr, es...) et l'appli se charge de mettre le libellé. En effet, faire une table juste pour ça, on m'a dit que c'était pas terrible. L'autre solution est d'utiliser un enum pour la langue.
Marsh Posté le 30-08-2010 à 16:26:49
Pour la 1ere méthode pourquoi tu n'as pas inversé lignes/colonnes ? C'est-à-dire mettre les langues en colonnes ?
Marsh Posté le 01-09-2010 à 10:25:26
La première solution me parait particulièrement stupide, même en mettant à part les limitations de mysql...tu rajoutes des colonnes à chaque fois que t'as un nouveau bout de texte sur le site?
...bon après je ne mettrais pas ça dans une base de données, de toute manière, c'est se compliquer la vie pour rien. L'avantage de gettext par exemple c'est d'avoir des éditeurs spécifiques pour les fichiers de traduction. En mettant ça en base tu vas soit devoir te faire chier à les rentrer toi-même à la main, soit te faire chier à faire une interface perso pour les saisir...
Marsh Posté le 01-09-2010 à 11:19:26
Moi je voyais plutot la premiere table comme une table normale mais ecrite avec colonne et ligne inversée pour plus de lisiblité dans le forum ...
Comme quoi ... on voit ce qu'on veut bien voire
Marsh Posté le 01-09-2010 à 16:59:57
Perso, je gère aussi mes traductions dans des fichiers texte.
Marsh Posté le 01-09-2010 à 20:20:22
Je trouve l'idée de Daemon excellente.
rufo a écrit : Perso, je gère aussi mes traductions dans des fichiers texte. |
Comment fais-tu pour chercher uniquement certains textes ?
Marsh Posté le 02-09-2010 à 15:07:13
Je fais un fichier par langue, après 2 solutions : des constantes, une par texte, ou un tableau associatif, une clé par texte.
Marsh Posté le 27-08-2010 à 16:45:50
Bonjour,
Je souhaite internationaliser un site web vitrine.
Je ne souhaite pas utiliser de bibli type gettext.
Je compte passer par une solution simple en mysql basique.
J'ai imaginé 2 méthodes sensiblement différentes dans le stockage des données, et je ne sais pas laquelle est la meilleure.
A vous donc de juger.
Tout d'abord, très important, la méthode doit m'éviter de devoir imaginer des noms pour chaque zone de texte.
Donc chaque élément de texte est nommé par un id numérique, incrémenté automatiquement lors de l'ajout.
Voici les deux méthodes de stockage :
1ère méthode :
- Une seule table mysql :
langue | 1 | 2 | 3 | ......
--------------------------------------------------------------------------------
fr coucou où est mon parapluie ? Brian est dans cuisine
en hi where is my umbrella ? Brian is in the kitchen
es hola donde esta my paraguas ? Brian esta en la cocina
J'ajoute donc un champ à chaque ajout d'un élement de texte.
Avantage : Une seule table => Simplicité
Inconvénient : Données supplémentaires quand au type du champ répété pour chacun
2ème méthode :
Une table de langues
id | nom | indicatif
------------------------------
1 Français fr
2 English en
3 Español es
Une table de traduction
id | langue | valeur
------------------------------
42 1 coucou
42 2 hello
.. .... ....
Avantage : Nombre de champs fini
Inconvenient : Plus lent à exploiter ?
Actuellement, j'ai mis en oeuvre la 2ème solution, mais j'ai des doutes.
Pouvez-vous m'ôter ces doutes ?
Merci d'avance
Message édité par Pascal le nain le 27-08-2010 à 16:46:35