IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Schéma Discussion :

Comment faire pour mettre des données en français et en anglais


Sujet :

Schéma

  1. #1
    mmz
    mmz est déconnecté
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 107
    Points : 100
    Points
    100
    Par défaut Comment faire pour mettre des données en français et en anglais
    Salut,
    j'ai une base de données (Mysql) qui doit contenir les données affichées sur un site web en deux versions : française et anglaise, je voudrais alors insérer les mêmes données en français et en anglais
    dois-je créer une table pour chaque langue ?

  2. #2
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Salut,

    Tu as plusieurs choix :

    Une table par langue : avantage, c'est plus performant, car tu as un accès direct aux données de la langue en cours, c'est efficace pour les recherches multi critères par exemple

    Un schéma par langue. C'est pareil que le premier cas, un peu plus lourd, et il faudra faire des scripts pour répliquer certaines données, cependant c'est plus propre que d'avoir un seul schéma avec les tables de toutes les langues mélangées, et une fois que tu auras fait le mécanisme de réplication, ajouter une langue se résumera à dupliquer un schéma, ce qui appréciable.

    Une colonne qui distingue la langue de l'enregistrement en cours, par exemple une colonne "id_langue" avec une table de correspondance "langues". C'est pratique, c'est le choix le plus commun je pense, car en général, la performance est quand même au rendez-vous si tu indexes bien tes colonnes, et c'est assez simple à mettre en oeuvre. Ajouter une langue équivaut à ajouter une ligne dans ta table de langues, et c'est pris en compte. Problème : tu auras du mal à connaitre la volumétrie exacte pour chaque langue, à moins de faire des outils destinés à cela, et donc il se peut que tu perdes rapidement notion des langues qui seraient "mises à l'écart". Autre problème, c'est que si tu as des tables de plusieurs centaines de milliers de lignes par langue, tu vas forcément perdre en performance..

    A+
    K

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Citation Envoyé par mmz
    Salut,
    j'ai une base de données (Mysql) qui doit contenir les données affichées sur un site web en deux versions : française et anglaise, je voudrais alors insérer les mêmes données en français et en anglais
    dois-je créer une table pour chaque langue ?
    Tu as plusieurs manières de répondre à ta question.
    Prenons une table simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaTable(Id, Attributs, Libelle)
    Si tu es sur de n'avoir que deux langues (FR et EN), tu peux doubler les colonnes de libellé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaTable(Id, Attributs, Libelle_En, Libelle_Fr)
    Mais tu es obligé de modifier tes requêtes pour accéder au bon libellé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT  Id
        ,   CASE    :Langue
            WHEN    FR  THEN    Libelle_Fr
            WHEN    EN  THEN    Libelle_En
            END AS Libelle
    FROM    MaTable
    Tu peux aussi créer un enregistrement par ligne, en spécifiant la langue du libellé Attributs,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaTable(Id, Attributs, Langue, Libelle)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT  Id
        ,   Libelle
    FROM    MaTable
    WHERE  Langue = :Langue
    Cela te permet de multiplier les langues.
    Mais cela peut poser des problèmes de mise à jour des attributs qui ne sont pas des libellés, puisqu'ils sont dupliqués pour chaque langue.
    La structure la plus souple consiste à conserver un libellé par défaut et créer à côté une table des libellés traduits, soit une table de libellés par table de données, soit une seule table de libellés pour toutes les tables de données (exemple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MaTable(Id, Attributs, LibCol1, LibCol2)
    Libelles(NomTable, NomColonne, Langue, Libelle)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    SELECT  Tbl.Id
        ,   Tbl.Attributs
        ,   Coalesce(Lb1.Libelle, Tbl.LibCol1)
        ,   Coalesce(Lb2.Libelle, Tbl.LibCol2)
    FROM
            MaTable     AS Tbl
        LEFT JOIN
            Libelles    AS Lb1
            ON  Tbl.Id = Lb1.Id
        LEFT JOIN
            Libelles    AS Lb2
            ON  Tbl.Id = Lb1.Id
    WHERE
            Lb1.Langue = :Langue
        AND Lb1.NomTable = 'MaTable'
        AND Lb1.NomColonne = 'LibCol1'
        AND Lb2.Langue = :Langue
        AND Lb2.NomTable = 'MaTable'
        AND Lb2.NomColonne = 'LibCol2'
    ;
    PS : Dernier exemple erroné : Voir correction du 14/02/2007
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  4. #4
    mmz
    mmz est déconnecté
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 107
    Points : 100
    Points
    100
    Par défaut
    Je vous remercie infiniment pour vos réponses,
    je penses que je vais choisir la première solution proposée par KiLVaiDeN
    càd de créer une table par langue, je penses que ça va me faciliter aprés l'accès et la modification des données
    je vous souhaite une trés bonne chance dans vos travaux

  5. #5
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Dans ce cas, si tu optes pour une table par langue, je te conseille de faire une astuce de nommage, par exemple :

    infos_fr
    infos_en

    ainsi, tu pourras modifier tes requêtes en temps réel, en modifiant le nom des tables en fonction de la langue en cours

    a+
    K

  6. #6
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut
    Pour ajouter tu ajoutes deux fois, pareils pour les modifs ?
    Scuse me while I kiss the sky ! Jimi Hendrix

  7. #7
    mmz
    mmz est déconnecté
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 107
    Points : 100
    Points
    100
    Par défaut
    oui c ça KiLVaiDeN, je pensais déjà à les nommer comme ceci :

    fr_infos
    en_infos

    c presque comme tu l'as dis
    encore merci pour toi, pour Bujuman aussi
    a+

  8. #8
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Citation Envoyé par Falco01
    Bonjour,

    Je vous ecris par rapport a la solution que vous avez propose dan s la page suivante :
    http://www.developpez.net/forums/sho...d.php?t=205366

    concernant la base de donnees multilingue. J'aimerais implementer cette solution dans mon MCD. La solution consistant a creer une unique table comportant toutes les traduction. Cette table contient les attributs suivant : noms de la table, colonne et traduction.

    Mais comment lier cette table avec toutes les autres dans le MCD ? Quelle la requete permettant de recuperer un champ traduit car il y a un probleme dans votre requete en effet, il n y a pas d'ID dans votre table libelle.
    ...
    Je ne comprend pas pourriez vous m'expliquer svp

    Merci
    En effet, j'ai bien oublié l'identifiant de ligne dans la table des libellés.

    La bonne réponse est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MaTable(Id, Attributs, LibCol1, LibCol2)
    Libelles(NomTable, NomColonne, IdLigne, Langue, Libelle)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    SELECT  Tbl.Id
        ,   Tbl.Attributs
        ,   COALESCE(Lb1.Libelle, Tbl.LibCol1)
        ,   COALESCE(Lb2.Libelle, Tbl.LibCol2)
    FROM
            MaTable     AS Tbl    
        LEFT JOIN
            Libelles    AS Lb1
            ON  Tbl.Id = Lb1.IdLigne
            AND Lb1.NomTable   = 'MaTable'
            AND Lb1.NomColonne = 'LibCol1'
            AND Lb1.Langue     = :Langue
        LEFT JOIN
            Libelles    AS Lb2
            ON  Tbl.Id = Lb1.IdLigne
            AND Lb2.NomTable   = 'MaTable'
            AND Lb2.NomColonne = 'LibCol2'
            AND Lb2.Langue     = :Langue
    ;
    Une autre solution est l'usage d'un dictionnaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MaTable(Id, Attributs, LibCol1, LibCol2)
    Dico(Libelle, Langue, Traduction)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    SELECT  Tbl.Id
        ,   Tbl.Attributs
        ,   COALESCE(Lb1.Traduction, Tbl.LibCol1)
        ,   COALESCE(Lb2.Traduction, Tbl.LibCol2)
    FROM
            MaTable  AS Tbl    
        LEFT JOIN
            Dico     AS Lb1
            ON  Tbl.LibCol1 = Lb1.Libelle
            AND Lb1.Langue  = :Langue
        LEFT JOIN
            Dico     AS Lb2
            ON  Tbl.LibCol2 = Lb2.Libelle
            AND Lb2.Langue  = :Langue
    ;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  9. #9
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Février 2007
    Messages : 14
    Points : 6
    Points
    6
    Par défaut Base de donnes multilingue
    Merci davoir poste le message sur le Forum en effet, cest une bonne idee. Puis je te redemander quelque chose.

    La solution que tu as corrige permet de traduire differents attributs de differentes tables ? Jusqu a la je crois avoir juste.

    Mais comment inserer cette table dans le MCD ci joint. Comment associer cette table de traduction avec toutes les autres ? Y a til une association de toutes les tables que l'on souhaite traduire a cette unique table. Le probleme c'est qu'il risque dy avoir des cercles et en conception cest pas conseille donc as tu une idee. Je poste ce message sur le forum avec limage de mon MCD.




    Sur limage jointe je souhaiterai traduire la description et les noms de toutes mes tables, comment dois je faire les liens ?

    Petite explication ; ma table de traduction s'appelle Translation_table, language contient toutes les langues possibles, et je souhaitre traduire les champs noms et description des tables 'devices', 'profiles', etc.

    Merci beaucoup pour ton AIDE.
    Images attachées Images attachées  

  10. #10
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    J'ajouterais la relation en Langues et Traductions mais, en soi, les traductions de libellés sont des tables techniques et leurs relations avec les autres tables du modèle ne doivent pas nécessairement apparaître dans le modèle, sinon à risquer de le surcharger
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  11. #11
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Février 2007
    Messages : 14
    Points : 6
    Points
    6
    Par défaut Question de conception
    Je voulais te poser une question, en fait , je ne connais que la technique Merise pour concevoir une base de donnees, mais quel technique utilises tu pour concevoir ta base de donnees ,quel outil te sert tu ? Merise ou une autre car je nai appris que la methode relationnel, y en a til dautre pour concevoir sa base, y en a t il une mieux adaptee pour Access ?

    Merci beaucoup pour les informations.

    Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 14/11/2011, 15h52
  2. Réponses: 2
    Dernier message: 18/07/2008, 12h10
  3. comment faire pour extraire des données ?
    Par bernardgiraud dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 31/08/2007, 00h37
  4. [MySQL] Php, je ne comprends pas comment faire pour introduire des données dans une table
    Par Liondd dans le forum PHP & Base de données
    Réponses: 23
    Dernier message: 14/12/2006, 12h53
  5. [VB6]Comment faire pour récuperer des donnée sur un mp3 ou wav ?
    Par MegaBigBoss dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 13/06/2006, 16h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo