Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1475 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

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

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1432204
sakamoto
BanZaï
Posté le 27-08-2006 à 19:14:43  profilanswer
 

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 ?
 

mood
Publicité
Posté le 27-08-2006 à 19:14:43  profilanswer
 

n°1432208
axelazerty
Posté le 27-08-2006 à 19:24:05  profilanswer
 

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.

n°1432250
sakamoto
BanZaï
Posté le 27-08-2006 à 22:09:46  profilanswer
 

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

n°1432252
axelazerty
Posté le 27-08-2006 à 22:13:11  profilanswer
 

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

n°1432865
sakamoto
BanZaï
Posté le 29-08-2006 à 09:11:38  profilanswer
 

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.

n°1432868
axelazerty
Posté le 29-08-2006 à 09:13:33  profilanswer
 

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 ?

n°1433123
sakamoto
BanZaï
Posté le 29-08-2006 à 15:39:32  profilanswer
 

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

n°1438173
younes371
Posté le 07-09-2006 à 11:32:22  profilanswer
 

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
n°1440446
MagicBuzz
Posté le 11-09-2006 à 16:41:55  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

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

 

Sujets relatifs
free() sur tableau dynamiques à 4 dimensions[HTML et PHP] Redirection site avec login mdp
site incompatible avec IEProjet de refonte de mon site
script alternatifs pour connexion à un serveur MySQL[RESOLU]newsletter - vérifier l'installation de Mysql [RESOLU]
[PHP] Aide pour une modification du index.php de mon Site[resolu]creer un site reserve a la famille
Partitionnement de grosses tables dans MySQL 5Mysql pagination
Plus de sujets relatifs à : Base MySql sur free et gestion de traductions sur un site web


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR