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

MS SQL Server Discussion :

Support multilingue d'une application


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    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 Support multilingue d'une application
    Salut,

    Il s'agit plus particulièrement d'un site web.

    Voilà Supposons que je souhaite faire un site internet en plusieurs langues.

    Je peux enregistrer les différentes versions d'une valeur d'un enregistrement en utilisant au moins deux façons: sous forme d'enregistrements uniques ou sous forme de champs d'un seul enregistrement. Ex pour le pays France, je peux faire:
    ID FR EN DE
    1 France France Frankreich
    2 Angleterre England
    ...
    Ou bien (LANG ferait référence à une table)
    ID NOM LANG
    1 France FR
    2 France EN
    3 Frankreich DE
    4 Angleterre FR
    5 England EN

    La deuxième solution présente l'avantage de ne pas avoir de limites. Par contre, dans le cas d'informations plus complexes, cela peut être plus difficile à gérer. Par exemple si on souhaite ajouter une description du pays, il faudrait une table description avec une enregistrement pour chacune des langues. Ou bien encore, une table qui contienne toutes les caractéristiques de l'entité.

    Comment faites vous?

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

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Par défaut
    Personnelement je créé autant de champs que de langues gérées.
    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    NomPays_FR
    NomPays_GB
    NomPays_DE
    Detail_FR
    Detail_GB
    Detail_DE
    Au niveau de l'applicatif j'ai une variable dession dans le cas d'un site ou une variable globale pour une application. Elle est initialisée au moment du login avec la langue choisie (FR, GB ou DE)

    Mes requetes sont
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cSQL = "Select NomPays_ " + Langue + "as NomPays, "
    cSQL = cSQL + "Detail_ " + Langue + "as Detail "
    cSQL = cSQL + "From ..."

  3. #3
    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
    Effectivement, ce principe fonctionne dans le cas de requetes sql construites dynamiquement. Par contre, les procédures stockées ne gère pas les champs "dynamiques".

    Du plus, s'agissant du nom et de la description ça va. Cependant, si tu dois renseigner une dizaine de champs dans 5 langues ça fait tout de suite beaucoup plus. SQL server 2000 est limité à 255 champs.

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

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Par défaut
    les procédures stockées ne gère pas les champs "dynamiques".
    Qu'est qui empèche d'écrire sous SQL Server

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Set @Langue = "FR"
    Set @cSQL = "Select NomPays_ " + @Langue + "as NomPays, "
    Set @cSQL = @cSQL + "Detail_ " + @Langue + "as Detail "
    Set @cSQL = @cSQL + "From UneTable"
    execute (@cSQL)
    Mais l'objection reste valable pour le nombre de champs.
    Je croyais que cette limite avait été dépassée.

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Japon

    Informations forums :
    Inscription : Novembre 2007
    Messages : 125
    Par défaut
    Bonjour,
    sinon utilisé plusieur tables

    un table qui définis les langues
    une table qui reprendra les infos

    genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    id_langue int
    id_clé_table int 
    id_target int ( si c'est un menu, ou des informations du table)
    info varchar (max) -- stockera l'information voulue
    ceci aura l'avantage que tu peut ajouter des langues comme tu le veux

    ps: je prend tj des int comme clé primaire

    enfin ceci n'est qu'une idée que j'ai déjà implémenter et qui fonctionne bien

  6. #6
    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
    Citation Envoyé par Delphi-ne Voir le message
    Qu'est qui empèche d'écrire sous SQL Server

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Set @Langue = "FR"
    Set @cSQL = "Select NomPays_ " + @Langue + "as NomPays, "
    Set @cSQL = @cSQL + "Detail_ " + @Langue + "as Detail "
    Set @cSQL = @cSQL + "From UneTable"
    execute (@cSQL)
    Rien évidement, mais au niveau des performance, je suis certain qu'on perd à faire une procédure stockée dont on (SqL Server) ne connait pas d'avance la syntaxe.

    Citation Envoyé par Delphi-ne Voir le message
    Mais l'objection reste valable pour le nombre de champs.
    Je croyais que cette limite avait été dépassée.
    Dans SQL 2005 oui.
    Citation Envoyé par mikaeru Voir le message
    Bonjour,
    sinon utilisé plusieur tables

    un table qui définis les langues
    une table qui reprendra les infos
    Oui, c'est une solution que j'envisagais. Je voudrais avoir une idée des solutions que vous (forumeurs) mettez en pratique.

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

  7. #7
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SET @Langue = 'FR'
    SELECT CASE @Langue
    WHEN 'FR' THEN NomPays_FR
    WHEN 'US' THEN NomPay_US
    ... END as NomPays
    From UneTable

Discussions similaires

  1. Système multilingue pour une application complexe
    Par Kebabier dans le forum NodeJS
    Réponses: 0
    Dernier message: 26/09/2013, 12h34
  2. Réponses: 0
    Dernier message: 25/11/2012, 11h49
  3. Support UTF8 pour une application
    Par Raiden dans le forum GTK+ avec C & C++
    Réponses: 5
    Dernier message: 10/07/2006, 19h50

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