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

Modélisation Discussion :

Base Multilangue (i18n)


Sujet :

Modélisation

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur VBA
    Inscrit en
    Mai 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2013
    Messages : 18
    Points : 13
    Points
    13
    Par défaut Base Multilangue (i18n)
    Bonjour le forum,

    avant de commencer l'exposé de mon problème, je tiens à préciser que je suis totalement néophyte en ce qui concerne Access.

    Mon objectif est de créer une base multilingue. Voici comment s'articule pour le moment la base (1er niveau de liste : la table ; 2e niveau, les champs) :

    • tbl_Languages
      • "id" (NuméroAuto)
      • "iso_639_1" (Texte court) : code à deux lettres en minuscules. Par exemple en, fr, de, etc.
      • "endonym" (Texte court) : nom du langage dans la langue concerné. Exemple English, Français, Deutsch, etc.
      • "is_used" (Oui/Non) : le langage est supporté ou non par l'application.

    • tbl_UserTypes
      • "id" (NuméroAuto)
      • "type" (Texte court)

    • tbl_Users
      • "id" (NuméroAuto)
      • "login" (Texte court)
      • "password" (Texte court)
      • "id_language" (Relation vers l'id de tbl_Languages : "SELECT tbl_Languages.id, tbl_Languages.iso_639_1, tbl_Languages.endonym FROM tbl_Languages WHERE (((tbl_Languages.is_used)=True)) ORDER BY tbl_Languages.endonym;" )
      • "id_usertype" (Relation vers l'id de tbl_UserTypes) : "SELECT tbl_UserTypes.id, tbl_UserTypes.type FROM tbl_UserTypes ORDER BY tbl_UserTypes.type; "

    • tbl_Products
      • "id" (NuméroAuto)
      • "product_name" (Texte court)



    J'ai mis le champs "product_name" en gras puisque c'est sur ce champs que se porte ma question : est-il possible, sans passer par du VBA, que ce champ ne soit pas 1 champ, mais n champs, n étant le nombre de langues cochées (is_used = True) de ltbl_Languages. C'est à dire que si je coche un nouveau langage, j'aurai un nouveau champ dans ma table tbl_Products. Et dans le cas contraire, quelles sont les méthodes les plus couramment admises pour gérer du multilingue évolutif ?

    Si mon post est tout nul, n'hésitez pas à me faire vos remarques.

    J'ai une pièce jointe à disposition, mais j'ai lu qu'on ne devait en mettre qu'en dernier recours.

    D'avance merci pour votre aide.

    Bonne journée,

    Kebrok

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Autant le dire tout de suite Access n'est pas concue pour etre multiingue.

    J'ai mis le champs "product_name" en gras puisque c'est sur ce champs que se porte ma question : est-il possible, sans passer par du VBA, que ce champ ne soit pas 1 champ, mais n champs, n étant le nombre de langues cochées (is_used = True) de ltbl_Languages. C'est à dire que si je coche un nouveau langage, j'aurai un nouveau champ dans ma table tbl_Products. Et dans le cas contraire, quelles sont les méthodes les plus couramment admises pour gérer du multilingue évolutif ?
    Om peut faire cela comme cela :

    tblProduit
    ClefProduit
    Autres info non texte

    tblNomProduit
    ClefProduit
    ClefLangue
    LibProduit

    Une autre possibilite est d'avoir une table des traductions :

    tblTraduction
    ClefTraduction
    NomTableSource
    NomChampSource
    ClefElement (attention il faut que tout tes "elements" aient une clef du meme type).
    ClefLangue
    Libelle

    Apres quand tu as besoin d'un texte tu vas le pecher dans la table soit avec une jointure, soit avec une function VBA. Le problem de la jointure c'est que cela peut bloquer tes donnees en lecture seule.
    Et je te conseille de definir une langue par defaut pour toujours avoir un libelle associe.

    L'avantage majeur de tblTraduction c'est qu'elle regroupe tous tes textes a traduire a une seule place.
    Elle t'evite aussi d'avoir une table associee a chacune de tes tables de donnees pour y stocker les valeurs textes qui changent en fonction des langues.
    Et on doit aussi pouvoir utiliser une relation si tu as un truc di genre :

    tblProduit

    ClefProduit
    Autres Infos
    NomTable toujours eagle a "tblProduit"
    Nom toujours egale a "Nom"

    On pourrait aloirs faire une jointure sur

    • tblProduit.ClefProduit <-> tblTraduction.ClefElement
    • tblProduit.NomTable <-> tblTraduction.NomTableSource
    • tblProduit.Nom <-> tblTraduction.NomChampSource


    C'est un peu etrange comme structure mais cela devrait marcher.

    Si tu as besoin de traduire des elements d'interface (ex : bouton, etiquette) la solution la plus simple est une table

    tblTraductionObjet
    ClefTraductionControl
    NomParent
    TypeParent
    NomObjet
    TypeObjet
    ClefLangue
    TexteObjet

    Et evidement il faut renir compte que les textes ne se composent pas de la meme facon dans toutes les langues et que leur taille varie.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur VBA
    Inscrit en
    Mai 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2013
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    Bonjour le forum,
    bonjour marot_r,

    merci d'avoir pris le temps de me répondre.

    Effectivement, la deuxième solution semble plus attirante.

    ClefElement (attention il faut que tout tes "elements" aient une clef du meme type).
    Je ne suis pas certain de comprendre ce que tu veux signifier par là (je suis débutant sur Access...)

Discussions similaires

  1. [2.x] Base de données et multilangues
    Par Opsse dans le forum Symfony
    Réponses: 3
    Dernier message: 04/06/2014, 14h14
  2. Base et Champs Multilangues
    Par cjacquel dans le forum Débuter
    Réponses: 1
    Dernier message: 20/01/2012, 14h35
  3. [1.x] i18n d'une base de données
    Par altair8080 dans le forum Symfony
    Réponses: 0
    Dernier message: 20/11/2011, 23h27
  4. [Modèle Relationnel] Gestion du multilangue dans une base de données
    Par _skip dans le forum Schéma
    Réponses: 5
    Dernier message: 13/04/2011, 12h43
  5. [I18n] Traduction via des fichiers ou en base ?
    Par SekYo dans le forum Ruby on Rails
    Réponses: 8
    Dernier message: 27/04/2007, 11h22

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