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

C# Discussion :

Propriété traduite dans plusieurs langues.


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    maa
    maa est déconnecté
    Membre éclairé
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Par défaut Propriété traduite dans plusieurs langues.
    Bonjour,

    J'aurais besoin d'un petit conseil de conception.
    Je développe une application multi-langues qui sert à organiser des produits. Ces produits ont un nom qui doit être traduit dans chaque langue. Pour la classe produit, je pensais faire un propriété "Nom" qui est un Dictionary<Lang, string> ou Lang est une énumération des langues possibles. Cela à l'avantage de pouvoir facilement paramétrer dans quelle langue je veux avoir le nom du produit, par contre ça n'est pas évident à utiliser avec le Binding, la sérialisation,...
    Auriez-vous une autre idée à me proposer ?

    Merci d'avance pour vos suggestions.

    mathmax

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161

  3. #3
    maa
    maa est déconnecté
    Membre éclairé
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Par défaut
    J'ai lu l'article, ça à l'air bien mais pour les raisons suivantes, je crains que cela ne me convienne pas :

    - J'ai besoin dans mon application d'avoir conjointement les traductions de mes propriétés dans les différentes langues. Par exemple, je voudrait pouvoir afficher les produits dans une gridview avec dans une colonne le nom en français et dans l'autre le nom en allemand. Or il me semble que la localisation est au niveau de l'application, c'est à dire qu'on peut seulement décider à un moment donné si l'application est dans une langue ou dans l'autre.

    - J'utilise nhibernate pour récolter mes donnée et les charger dans mes objets. Il est relativement facile de charger les différentes langues dans une propriété de type dictionnaire (une traduction par ligne du dictionnaire), mais je ne vois pas comment utiliser la localisation conjointement avec un tel outil de mapping O/R. Et même si c'était possible, cela voudrait dire qu'à chaque lancement de l'application, les données seraient chargées dans des fichiers xml plutôt que dans les objets ? J'ai peur que ça soit limite au niveau des performances...

  4. #4
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    bonjour

    Personnellement, je prendrais le problème de la façon suivante :

    1 - Que dois-je mettre dans ma base de donnée pour que les informations soient
    pertinentes et perennes ?

    2 - Pour la traduction, cela doit etre fait au niveau de l'application et de la "couche présentation"... comme cela, les textes affichés dépendent de la langue choisie...

    Apres, tu peux avoir un service (une classe) qui te fournit les traductions en fonction de ce que tu demandes... ET ce Language Provider va te fournir des fonctions genre : GetTranslation(string Language, string TextToTranslate)
    par exemple

    Voila comment j'attaquerais le problème

    The Monz, Toulouse

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    le probleme de la traduction dans son cas, TheMonz est autrement plus complexe.

    En effet, ton provider de langue ne peut pas connaître toutes les traductions possible et imaginable d'une langue à l'autre, d'autant que les traductions, souvent dépendent du contexte d'exploitation.
    Il suffit de voir comment tu traduirais certaines expressions anglaises qui dans le cas de l'informatique on une signification et dans le reste des cas, une autre radicalement diffrent. Je parle même pas des mots.

    si sa traduction regroupe des univers différents, comme d'un coté des Produits agricoles, et de l'autre des Produits informatique, les nomenclatures sont différentes, ainsi que le contexte linguistique pourtant les deux peuvent etre représenter dans une meme et unique table, avec éventuellement des tables de spécification... mais globalement par l'héritage... le Produit est le meme, pas du tout en terme de language.

    Et puis comment va tu représenter ton provider de langue ?
    Là il ne faut pas confondre langage coté logiciel, et donc de l'interface graphique, et langage coté données utilisateurs... ces univers sont différents.

    Pour ma part, j'ai le meme cas, donc en fait j'ai coupé la poire en deux
    J'ai les traductions systèmes de l'interface qui sont écrites dans l'application, dans les xml, et ressources de l'application (ressources localisées) et j'ai les traductions de donnes, qui sont dans une table à part.
    et là où habituellement j'ai un nom ou un libellé j'ai un code (une référence) vers cette table de traduction... qui est un ensemble de Dictionary... Cependant cette table de traduction comprend pas seulement les données spécifique d'un type d'objet mais de tout le système de données.

    Cela dit... personnellement je ne suis pas un afisionado des "framework" à la nhibernate et préfère écrire moi meme tout le code, ce qui me permet plus de liberté et d'excentricité sur le stockage dans la base de données.

    dans ce projet j'ai une seule table pour tous les objets avec le type de l'objet, son identifiant, et un champ XML avec sa définition XML entière. De là, mon programme peut instancier une classe depuis ce XML car je n'utilise pas la serialisation xml de .NET mais une sérialisation XML complète en profondeur.
    cela dit maintenant que Linq To SQL est sorti, je pense que cela va me réconsilier avec le mapping relationnel mais c'est une autre histoire.

  6. #6
    maa
    maa est déconnecté
    Membre éclairé
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Par défaut
    theMonz31, si tu parlais de ne pas stocker les traduction en base de données mais de les traduire au niveau de la couche présentation, ça n'est pas possible dans mon cas (pour les raisons dont parle cinemania)

    cinemania, donc si j'ai bien compris, tu as fais un dictionnaire centrale comprenant toutes sorte de traduction, chaque ligne ayant un identifiant. Tu retrouve ensuite la traduction depuis tes objets grâce à cet identifiant. Par exemple, dans la propriété "Nom" de la classe produit du stock seulement l'identifiant puis quand tu veux t'en servir, tu fais un truc du genre :
    MaTableDeTradution[MonProduit.Nom][Langue] ?
    Quel est l'avantage de procéder comme cela selon toi ?
    Dans ce cas, il faut refléter la même chose au niveau base de donnée, c'est à dire faire une table de traduction centrale.
    Pour le moment, j'ai la structure suivante : à chaque fois que j'ai une table contenant des textes à traduire, je crée la table MaTable_Texts qui contient les identifiant des lignes de MaTable, les code iso des langues et les traductions des textes. Donc au final, je charge les traduction directement dans mes objets.

Discussions similaires

  1. Application dans plusieurs langues
    Par Shma94 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 05/04/2011, 11h07
  2. fichiers de ressources dans plusieurs langues
    Par pcouas dans le forum Débuter
    Réponses: 2
    Dernier message: 16/02/2009, 18h26
  3. Réponses: 3
    Dernier message: 13/11/2008, 22h37
  4. Réponses: 3
    Dernier message: 16/10/2008, 09h26

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