Base MySql sur free et gestion de traductions sur un site web

Base MySql sur free et gestion de traductions sur un site web - SQL/NoSQL - Programmation

Marsh Posté le 27-08-2006 à 19:14:43    

Salut à tous,
J'ai une BDD sur free et je me posais les questions suivantes:
J'aimerais mettre en place un petit site qui serait visualisable en 3 langues.
Pour rendre la chose possible de manière propre, je pensais utiliser une table qui contiendrait les diverse traductions et suite aux clicks des utilisateurs sur un bouton/lien, la page serait remise à jour.
 
Question : Que pensez-vous de cette manière pour gérer les traducs ?
 

Reply

Marsh Posté le 27-08-2006 à 19:14:43   

Reply

Marsh Posté le 27-08-2006 à 19:24:05    

Bonne idée je pense, même si je n'ai jamais fait de sites multilingues pour l'instant.
A la connexion, tu peux faire cliquer sur un drapeau (francais, anglais, etc) pour initialiser une variable de session, que tu utiliseras dans tes requêtes SQL pour choisir le bon langage.

Reply

Marsh Posté le 27-08-2006 à 22:09:46    

Une variable de session tu dis? Comme je suis débutant, je ne vois exactement en quoi cela consiste, pourrais-tu stp approfondir? Merci

Reply

Marsh Posté le 27-08-2006 à 22:13:11    

le plus simple est de lire la section sur les sessions, c'est très bien expliqué.
http://www.php.net/manual/en/ref.session.php

Reply

Marsh Posté le 29-08-2006 à 09:11:38    

J'ai posté la même discussion dans la partie PHP et il s'avère que la solution orientée BDD semble être plus lourde. Une solution à base de fichiers php contenant les langues m'a été plusieurs fois évoquée, je pense m'orienter vers cette solution.
Merci pour vos infos en tous cas.

Reply

Marsh Posté le 29-08-2006 à 09:13:33    

Tout dépend de l'utilisation : y a t il beaucoup de texte à traduire ? Doit on pouvoir faire des recherches dedans ? Qui va s'occuper se saisir les traductions ?

Reply

Marsh Posté le 29-08-2006 à 15:39:32    

En fait, j'imaginais un site style blog accessible en plusieurs langues pour que mes amis (pas forcémment fçais) puissent y accéder

Reply

Marsh Posté le 07-09-2006 à 11:32:22    

Jai deja eu l'experience d'un site web multi-langues,
La solution c'était, pour chaque langue on fait un repertoit a port qui contient les pages web de cette langue (faire autant de langues autant de repertoit), et bien sûr il y a un repertoit racine qui contient la langues française ou anglais par exemple(www.test.com l'adresse du site, pour l arabe:www.test.com/arabe ,espagne : www.test.com/es ect.), et pour la base de donées on crée une seule base de données contenant toutes les tables, par exemple si on a une table nommée client, on doit crée une table client en françai et une autre en arabe ainsi de suite, chaque langue a sa propre table, c gourmand mais efficace.


---------------
polytech'Grenoble
Reply

Marsh Posté le 11-09-2006 à 16:41:55    

younes371 > t'es adepte des solution gores toi :sweat:
 
je fais des sites depuis 1999, et j'ai dû abandonner la solution que tu préconise depuis 2000 : impossible à maintenir.
 
ce que je préconise :
1/ utilisation des librairies multi-lingue spécifiques au langage. en PHP ou en .NET par exemple, il y a de base, des librairies permettant de faire du code multi-lingue sans devoir écrire et gérer "l'intelligence" du système. c'est éprouvé, rapide, et fait gagner un temps précieux.
2/ si l'utilisation de ces librairies est impossible (absente chez l'hergeur, etc.), alors :
 
PARTOUT où on a un libellé, appeler une fonction "getLabel(codlab, codlan)"
 
Bien penser à avoir le codlan en paramètre, ne pas se reposer aveuglément sur la session !
 
Ensuite, coder cette fonction de la sorte (pseudo-code C#) :
 

Code :
  1. const string LANGUE_PAR_DEFAUT = "EN";
  2. string getLabel(string codlab,  string codlan)
  3. {
  4.     string txt;
  5.     txt = (select txtlab from label where codlab = @codlab and codlan = @codlan);
  6.     if (txt != null)
  7.     {
  8.       return txt;
  9.     }
  10.     else if (txt == null && codlan != LANGUE_PAR_DEFAUT)
  11.     {
  12.       return getLabel(codlab, LANGUE_PAR_DEFAUT);
  13.     }
  14.     else
  15.     {
  16.       /* On peut aussi ajouter une alerte administrive aussi */
  17.       return ("¤" + codlab + "¤" );
  18.     }
  19. }


 
Ensuite, tu fais une table "LABEL" avec la structure "codlan char(2), codlab varchar(50), txtlab varchar(2000)"
 
et n'hésite pas à faire des codes dignes de ce nom.
 
genre la quatrième entrée du menu, ça ne doit pas être "menu4", mais "ACCES_AU_PANIER" par exemple. Que tu ne passes pas des heures à relire ton code par la suite.
 
n'hésite pas à te servir de ce système aussi pour stocker aussi les noms d'images par exemple.
 
avec ce système, tu n'auras qu'une version unique de toutes tes pages et la possibilité de modifier tous les libellés du site, dans toutes les langues, sans toucher une ligne de code, et de la même façon, tu pourras créer autant de langues que tu veux sans ne jamais retoucher une ligne de code.
 
ça permet aussi de pouvoir changer de langue à tout moment, sans devoir repasser par la page d'acceuil et perdre sa navigation (c'est bien chiant)
Genre : http://accessories.euro.gehealthca [...] ro=1F04070 <- tu peux consulter la fiche du produit dans n'importe quelle langue, sans perdre ta navigation. avec la solution de younes c'est virtuellement impossible.
 
autre solution, que j'ai utilisé pour un site où je ne disposais pas d''une base de données, et où je n'avais pas encore compris le fonctionnement (pourtant si simple) de la gestion multilingue de C# :
 
Fichier XML :

Code :
  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <labels>
  3. <!-- Bannière -->
  4. <message codmsg="welcome">
  5.  <language codlan="FRA">Bienvenue {0}</language>
  6.  <language codlan="ENG">Welcome {0}</language>
  7. </message>
  8. <message codmsg="prevpage">
  9.  <language codlan="FRA">PAGE PRÉCÉDENTE</language>
  10.  <language codlan="ENG">PREVIOUS PAGE</language>
  11. </message>
  12. <message codmsg="disconnect">
  13.  <language codlan="FRA">Déconnexion</language>
  14.  <language codlan="ENG">Disconnect</language>
  15. </message>
  16. <message codmsg="home">
  17.  <language codlan="FRA">Accueil</language>
  18.  <language codlan="ENG">Home page</language>
  19. </message>
  20. ...


 
Les fonctions de recherche d'une message :

Code :
  1. /// <summary>
  2. /// Summary description for language.
  3. /// </summary>
  4. public class language
  5. {
  6.  private const string DefaultCodlan = "FRA";
  7.  private const string DefaultMessagePattern = "¤{0} - {1}¤";
  8.  private string codlan;
  9.  private XmlNode dom;
  10.  public language(string codlan, string mappath)
  11.  {
  12.   this.codlan = codlan;
  13.   StreamReader sr = new StreamReader(mappath + "/ressources/labels.xml", Encoding.UTF8);
  14.   XmlDocument doc = new XmlDocument();
  15.   try
  16.   {
  17.    doc.LoadXml(sr.ReadToEnd());
  18.   }
  19.   catch
  20.   {
  21.   }
  22.   sr.Close();
  23.   sr = null;
  24.   this.dom = doc.SelectSingleNode("labels" );
  25.   doc = null;
  26.  }
  27.  ~language()
  28.  {
  29.   this.dom = null;
  30.  }
  31.  public string GetMessage(string msgcod)
  32.  {
  33.   string retMessage = string.Format(DefaultMessagePattern, msgcod, this.codlan);
  34.   foreach (XmlNode ch in this.dom.SelectNodes("message" ))
  35.   {
  36.    if (ch.Attributes["codmsg"].Value == msgcod)
  37.    {
  38.     foreach (XmlNode chch in ch.SelectNodes("language" ))
  39.     {
  40.      if (chch.Attributes["codlan"].Value == this.codlan)
  41.      {
  42.       retMessage = chch.InnerText;
  43.       break;
  44.      }
  45.      else if (chch.Attributes["codlan"].Value == DefaultCodlan)
  46.      {
  47.       retMessage = chch.InnerText;
  48.      }
  49.     }
  50.     break;
  51.    }
  52.   }
  53.   return retMessage;
  54.  }
  55. }


 
Puis des appels à cette fonction :

Code :
  1. lan = new language((string)Session["codlan"], Server.MapPath("." ));
  2. ((Label)e.Item.FindControl("titFam" )).Text = lan.GetMessage("titFam" );
  3. ((Label)e.Item.FindControl("titFou" )).Text = lan.GetMessage("titFou" );


 
On voit qu'en fait, c'est le même fonctionnement finalementqu'avec la BDD, c'était juste pour donner un exemple complet ;)
 
 
 
ah, et pour les données, idem, surtout pas la solution de younes.
un champ "codlan" dans chaque table nécessitant une localisation, et voilà !
 
ps : la table "produit" n'est pas localisable par exemple, c'est le même produit, que tu le vendes à un portugais ou un égyptien.
par contre, la table "produit_description" elle, sera localisé, car les infos sur le produit ne sont pas les mêmes d'une langue à l'autre.
passer en multi-lingue une base, ça nécessite souvent le split d'un certain nombre de tables en plusieurs. ne pas foncer bille en tête à rajouter des codlan partout !


Message édité par MagicBuzz le 11-09-2006 à 16:53:47
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed