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

ASP.NET Discussion :

Internationalisation d'élément de la base de données


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Freelance
    Inscrit en
    Juillet 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2009
    Messages : 45
    Par défaut Internationalisation d'élément de la base de données
    Bonjour,
    Je travaille sur un site en ASP.NET qui a pour but de gérer l'internationalisation. Je suis parti pour utiliser le système de "Local Ressources" proposé par Microsoft mais je me pose une question. Comment faire (proprement) pour que les éléments de la base de données change aussi de langue. Il faut bien sûr que quelque part ils soit traduit.

    Dans ma base de données j'ai des éléments qui correspondent à des descriptions et ce sont donc des phrases en français.

    ASP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <asp:DataList ID="DataList1" runat="server" OnItemDataBound="dlItemDataBound" 
                        meta:resourcekey="DataList1Resource1">
                        <ItemTemplate>
                            <asp:Label ID="lblName" runat="server" meta:resourcekey="lblNameResource1"/>
                            <asp:Label ID="lblInfo" runat="server" meta:resourcekey="lblInfoResource1"/>
                        </ItemTemplate>
                    </asp:DataList>
    C#
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    protected void dlItemDataBound(object sender, DataListItemEventArgs e)
            {
                Label lblName = (Label)e.Item.FindControl("lblName");
                lblName.Text = ((MonObjet)e.Item.DataItem).m_Name;
     
                Label lblInfo = (Label)e.Item.FindControl("lblInfo");
                lblInfo.Text = ((MonObjet)e.Item.DataItem).m_Info;
            }
    Et donc j'aimerai que lblName et lblInfo soit aussi traduit...

    Merci d'avance,
    Haelle

  2. #2
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Salut,

    Les fichiers ressource c'est pour les parties statiques du site. Pour le faire avec une BD, tu peux t'inspirer de ceci: http://immobilis.developpez.com/arti...-base-donnees/

    Pour traduire les contenus dynamiques c'est un peu différent. Est-ce ton besoin?

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  3. #3
    Membre averti
    Homme Profil pro
    Freelance
    Inscrit en
    Juillet 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2009
    Messages : 45
    Par défaut
    oui c'est ce que je cherchais, je me sens bête de n'avoir pas trouvé ce tuto hier...
    Merci bien, cette solution est plus élégante que celle que j'allais faire.
    Bonne journée
    Haelle

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2006
    Messages : 28
    Par défaut
    Citation Envoyé par Immobilis Voir le message
    ...Pour traduire les contenus dynamiques c'est un peu différent...
    Pour ma part, je m'intéresse à la traduction de contenu dynamique.

    En effectuant quelques recherches sur le Web, j'ai vu plusieurs possibilités dont :
    • Ajouter un champs pour chaque langue dans la table (contenu_fr, contenu_en, etc.)
    • Pour chaque table à traduire, créer une seconde table de traduction qui y est liée. Par exemple (de manière simplifiée) :
      table languages
      -- id (int)
      -- name (varchar)

      table categories
      -- id (int)

      table categories_translation
      -- id (int)
      -- category_id (int)
      -- language_id (int)
      -- title (text)
      -- content (text)
    • La traduction dans une table centralisée, accessible via un index "jeton" :
      table languages
      -- id (int)
      -- name (varchar)

      table categories
      -- id (int)
      -- token (varchar),

      table content
      -- id (int)
      -- token (varchar)

      table translation
      -- id (int)
      -- content_id (int)
      -- language_id (int)
      -- content (text)


    De ton côté, quelle(s) méthode(s) préconise-tu?

  5. #5
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    sALUT
    Citation Envoyé par Davjack Voir le message
    De ton côté, quelle(s) méthode(s) préconise-tu?
    Pour ma part, je dirai la table centralisée. C'est plus simple à maintenir. Il faut une table sous cette forme:
    1. TABLE_NAME (nom de la table dans laquelle se trouve l'enregistrement)
    2. FIELD_NAME (nom du champ dans lequel se trouve l'enregistrement)
    3. FIELD_ID (identifiant de l'enregistrement à traduire)
    4. LANGAGE_ID (identifiant de la langue)
    5. TRANSLATION (traduction)
    Les 4 premiers champs constituent la clef de la table). Tu peux ajouter un identifiant auto-incrémenté comme clef primaire.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2006
    Messages : 28
    Par défaut
    Merci pour ta réponse!

    J'ai également vu une autre solution qui consiste à faire une auto-jointure sur les tables à traduire.
    Pour reprendre l'exemple avec la table catégorie, ça donnerait qqch dans le genre :
    table languages
    -- id (int)
    -- name (varchar)

    table categories
    -- id (int)
    -- content (varchar)
    -- language_id (int)
    -- main_row_id (int)
    Les enregistrement ayant un main_row_id null sont les enregistrement de base (langue principale de l'application). Les traductions se réfèrent à l'enregistrement de base.

    Ta solution me paraît bien. Avec une petite adaptation, il doit être possible de gérer dans cette table l'ensemble des traductions liées aux enregistrements et à la structure du site de manière à simplifier et homogénéiser le code de l'application (quelle que soit la traduction, elle se fait toujours de la même manière).

  7. #7
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Bonjour Davjack,

    Est-ce que tu peux détailler un peu :
    - ce que tu entends par "contenu dynamique"
    - jeton

    En effet, je ne comprends pas la structure des tables dont tu parles avec la notion de token.

  8. #8
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Davjack Voir le message
    Merci pour ta réponse!

    J'ai également vu une autre solution qui consiste à faire une auto-jointure sur les tables à traduire.
    Pour reprendre l'exemple avec la table catégorie, ça donnerait qqch dans le genre :

    Les enregistrement ayant un main_row_id null sont les enregistrement de base (langue principale de l'application). Les traductions se réfèrent à l'enregistrement de base.

    Ta solution me paraît bien. Avec une petite adaptation, il doit être possible de gérer dans cette table l'ensemble des traductions liées aux enregistrements et à la structure du site de manière à simplifier et homogénéiser le code de l'application (quelle que soit la traduction, elle se fait toujours de la même manière).
    Ça me semble particulièrement mauvais : tu démultiplies les lectures et le volume lu pour pas grand chose. D'autant que lorsque tu consultes les données dans la langue "de base", alors tu fais une auto-jointure inutile.

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

Discussions similaires

  1. [MySQL] Affichage d'éléments de la base de donnée
    Par jakj82 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 11/04/2014, 13h49
  2. [Débutant] ajouter plusieurs élément dans une base de données
    Par marie-anne dans le forum VB.NET
    Réponses: 8
    Dernier message: 29/06/2011, 18h07
  3. Réponses: 4
    Dernier message: 18/08/2008, 12h44
  4. Ajouter des éléments dans une base de données Access
    Par bidule123456 dans le forum ASP
    Réponses: 74
    Dernier message: 07/09/2007, 14h00
  5. insérer des élément dans une base de donné
    Par wiss20000 dans le forum JDBC
    Réponses: 5
    Dernier message: 01/03/2007, 14h49

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