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

Windows Forms Discussion :

Application multi-langues dynamique


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 49
    Points : 35
    Points
    35
    Par défaut Application multi-langues dynamique
    Bonjour,

    J'ai parcouru avec intérêt les différents sujets portant sur les applications multilangues mais aucune des solutions proposées ne répond à mon problème.

    Je souhaiterai développer une application multi-langues dans laquelle il soit simple de rajouter de nouvelles langues. Je souhaiterai qu'il ne soit pas nécessaire d'ouvrir visual studio et de recompiler le programme pour pouvoir ajouter une langue, et je souhaiterai que les fichiers de langue soient facilement éditables.

    J'avais pensé faire un fichier texte ou xml pour chaque langue mais je ne vois pas trop comment permettre à l'utilisateur de sélectionner sa langue...

  2. #2
    Membre confirmé
    Profil pro
    Développeur freelance
    Inscrit en
    Août 2006
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur freelance

    Informations forums :
    Inscription : Août 2006
    Messages : 453
    Points : 586
    Points
    586
    Par défaut
    avec les fichiers xml, tu peux proposer les différentes langues en fonction des fichiers xml présent dans un répertoire ...

    Attention le fichier xml devra toujours avoir le même format, par example :
    - lang_francais.xml
    - lang_anglais.xml
    - lang_espagnol.xml
    - lang_xxxxxxx.xml (où xxxxx représente le nom de la langue qui sera affiché dans ton contrôle.

    Ensuite lorsque que ton programme se lance tu vas scruter le répertoire des fichiers langues et en fonction des fichiers présents tu construis ta combo avec les langues.
    Cette solution est un peu bourin je trouve ... mais cela se fait.

    Mosco

  3. #3
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 49
    Points : 35
    Points
    35
    Par défaut
    yeap je vais essayer de mettre cela en place... si quelqu'un à toutefois une idée moins bourrine comme dit mosco je suis preneur!

  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
    Points : 5 194
    Points
    5 194
    Par défaut
    Beh, tu peux aussi mettre toutes tes traductions dans 1 seul fichier XML

    Et ensuite, quand tu veux rajouter une langue, il suffit de rajouter une ligne de traduction pour chaque mot

    Genre

    <mot ="coucou">
    <trad lang="UK" text="hello"/>
    <trad lang="GE" text="Guten Tag"/>
    </mot>

    etc.. eventuellement, tu peux meme utiliser un editeur maison pour afficher
    les données sous forme de grilles

    The Monz, Toulouse

  5. #5
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 49
    Points : 35
    Points
    35
    Par défaut
    yeap theMonz j'ai vu ton topic sur un sujet proche de celui-ci mais le problème est que les traducteurs seront surement aux quatre coins du monde donc je préfére avoir un fichier par langue

  6. #6
    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
    Points : 5 194
    Points
    5 194
    Par défaut
    ok pour des fichiers pour chaque langue...

    Maintenant, tu peux aussi avoir un "meta" fichier qui te decrit les différentes
    langues disponibles pour ton application et qui donne une reference sur le
    fichier de langue associé...

    genre :

    <language name="Francais" file="d:\traduction\french.xml"/>

    ce qui evitera d'avoir à parser "tous" les fichiers XML dispo.. dans un repertoire

    The Monz, Toulouse

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 66
    Points : 80
    Points
    80
    Par défaut
    Dans l'application sur laquelle je suis, il nous est également important de pouvoir ajouter de nouvelles langues facilement.

    Au lieu d'utiliser dex fichiers XML nous stoquons toutes les strings dans la base de données, l'avantage étant que l'on facilement modifier les traductions en manipulant directement la base de données. Pas besoin d'aller deployer des fichiers sur les machines.

    Sinon nous avons du code spécifique pour chaque langue, par exemple du code pour convertir un nombre en chiffre en une string avec le nombre converti en lettres (ex.: 42 -> "quarante deux"). Pour éviter de devoir modifier l'application dans le cas ou une nouvelle langue serait ajoutée un système de plugin à été créé.
    Il y a répertoire contenant les plugin (des .dll), une langue par plugin. Lors du lancement de l'application on regarde la langue dans laquelle doit tourner l'application et le plugin correspondant est chargé.

    Si l'application est utilisée en même temps dans plusieurs langues tu dois faire attention à une chose : les données introduites par les utilisateurs.
    Imagine que l'application soit utilisée en même temps par des français et des allemands. Les francais vont encoder des données en francais et les allemands vont encoder les données en allemands.
    Si les données sont partagées entre Francais et les Allemands on va se retrouver avec des données en un mix de francais et allemand, Oups!
    Imagine un "dossier" qui possède un champ "nom de dossier", le risque est de se retrouver avec des listes de dossiers contenant des entrées en francais et en allemand!
    La solution a ca est de permettre d'encoder les données dans toutes les langues de l'application. Au lieu d'avoir un champ "nom de dossier" dans l'écran ou l'on encode un nouveau dossier, on se retrouve avec une liste "nom de dossier", ou l'on peut introduire du texte pour chaque langue.

  8. #8
    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
    Points : 5 194
    Points
    5 194
    Par défaut
    Ca, c'est du projet international

    Tu bosses dans la finance ?

    Moi, dans la simulation (donc, on fait un peu de multilingue, mais qu'au niveau
    des aspects visuels, pas comportementaux

    The Monz, Toulouse

  9. #9
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 49
    Points : 35
    Points
    35
    Par défaut
    Dans un premier temps je vais faire un fichier par langue...
    TheMonz je me suis inspiré du sujet dans lequel tu as mis ton exemple en XML comme base mais je ne sais pas si c'est la fin de journée qui me fatigue mais je n'arrive pas à faire quelque chose de tout simple.

    J'ai crée un fichier xml pour créer ensuite le xsd avec xsd qui m'a généré la classe language.cs.

    Fichier XML pour créer mon schema XSD
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?xml version="1.0" encoding="utf-8"?>
    <language value="">
      <component name="" translation="" />
    </language>
    Fichier XML que je souhaite utiliser comme fichier de langue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?xml version="1.0" encoding="utf-8"?>
    <language value="Français">
      <component name="label1" translation="Bonjour1" />
      <component name="label2" translation="Bonjour2" />
    </language>
    Et donc quand je clique sur un bouton je voudrai mettre à jour un label comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
                language toto = new language();
                XmlSerializer xml = new XmlSerializer(typeof(language));
                StreamReader reader = new StreamReader("languages/French.xml");
                toto = xml.Deserialize(reader) as language;
     
                label1.Text = toto.component.translation;
    Bon donc là ça marche très bien mais ça me récupère la première ligne; ça m'affiche bonjour1 j'aimerai pouvoir sélectionner le component que je souhaite... et ainsi pouvoir donner bonjour2...

  10. #10
    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
    Points : 5 194
    Points
    5 194
    Par défaut
    Dans la solution que je presentais, en fait, tu te retrouves une fois le fichier XML déserialiser avec une classe qui contient la liste des traduction...

    Ensuite, il faut que tu es une méthode qui recherche le bon élément en fonction de son "name" par exemple...

    Un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public String GetTranslation(String textToTranslate)
    {
         foreach(Component c in traduction.component)
         {
                if(c.name == TextToTranslate)
                {
                       return c.translation;
                }
         }
     
         return TextToTranslate;
    }
    L'idée est que ta fonction cherche dans sa liste l'élément à traduire.

    Si tu veux, je te posterais demain une classe Static qui permet de faire
    cela en multilingue et que j'ai codé pour le fun dans l'apres midi.

    Ca te donnera une base à exploiter et donc tu pourras t'inspirer peut-etre.

    Je te posterais le zip de l'application.

    Dans cet objet static (singleton), je fournis des méthodes pour traduire soit un texte soit directement traduire une form (en incluant les menus, et tous les controles embarqués dans la form... et qui traduit aussi les fenetres filles si on se retrouve dans une architecture MDI)... cette classe permet aussi de zaper de langue au runtime et donc de faire une mise à jour de tous les elements de ton IHM... poru se faire, cette classe se base sur la propriété "name" d'un composant plutot que sur son texte... Si je prefere me baser sur le name plutot que le texte, c'est pour la bonne raison qu'aprse traduction, si le texte sert de clé de recherche pour traduire, cette clé ne sera plus valable puisque traduite

    A demain alors pour la "livraison" de l'exmple complet

    The Monz, Toulouse

  11. #11
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 49
    Points : 35
    Points
    35
    Par défaut
    Merci bien pour tes indications et merci pour le zip, je vais m'en inspirer à coup sur !
    Là je ne suis plus sur un PC embarquant mon projet donc je ne peux pas avancer, mais dès demain je m'y remets!

  12. #12
    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
    Points : 5 194
    Points
    5 194
    Par défaut
    allez, here comes the rain again

    Et le zip de traduction

    Avec ca, t'as plus qu'à faire un outil pour editer les fichiers autrement qu'à
    la mano.. Et tu montes une solution pour les entreprises et tu fais fortune

    The Monz, Toulouse
    Fichiers attachés Fichiers attachés

  13. #13
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 49
    Points : 35
    Points
    35
    Par défaut
    LOL je te remercie je vais regarder ça tout de suite! et je te fais un retour dans la journée!

    Pour ce qui est de faire fortune je te reverserai une partie des royalties

  14. #14
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 49
    Points : 35
    Points
    35
    Par défaut
    Merci TheMonz, ta solution se révèle très pratique je l'ai quelque peu adaptée et c'est vraiment sympa!

    Par contre j'aurai une question... as-tu une idée de comment je pourrai faire pour traduire un StatusStrip qui change en fonction d'un état....

  15. #15
    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
    Points : 5 194
    Points
    5 194
    Par défaut
    Beh, si tu regardes bien ma classe de traduction, elle fournit une methode
    GetTranslationText ou un truc comme ca (j'ai la femme d'ouvrir ma solution pour te dire le nom exacte)

    Donc, dans ton code, quand ton statusStrip "change" d'état en terme d'affichage de texte, il te suffit de faire un truc du genre:

    StatusStrip.Items["TonItem"].Text = Traduction.GetTranslationText("TonNomATraduire");

    et voila

    Ca correspond à ton besoin ?

    The Monz, Toulouse

  16. #16
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 49
    Points : 35
    Points
    35
    Par défaut
    oops pas bête! Merci oui ça me convient merci beaucoup!

  17. #17
    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
    Points : 5 194
    Points
    5 194
    Par défaut
    De rien

    C'est du vécu ce que je t'ai filé fruit d'une longue expérience (he papy... )

    The Monz, Toulouse

  18. #18
    AP
    AP est déconnecté
    Membre confirmé
    Avatar de AP
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2002
    Messages : 480
    Points : 538
    Points
    538
    Par défaut
    Citation Envoyé par theMonz31
    allez, here comes the rain again

    Et le zip de traduction

    Avec ca, t'as plus qu'à faire un outil pour editer les fichiers autrement qu'à
    la mano.. Et tu montes une solution pour les entreprises et tu fais fortune

    The Monz, Toulouse
    Hello,

    Ta solution est bien pratique. Je souhaiterais l'utiliser en la modifiant un peu dans un projet commercial, est-ce possible?

    Merci par avance

  19. #19
    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
    Points : 5 194
    Points
    5 194
    Par défaut
    AP, "ma" solution, je l'ai codé librement... en 2 heures environs donc, je te promets que tu peux l'utiliser comme bon te semble... sans aucunes restrictions

    Mais je te remercie d'avoir demander cette "autorisation" car c'est plaisant
    de voir qu'il reste des gens correctes en informatiques


    Pour info, TOUT ce que je poste ici, est "libre de droit"...

    ET je te promet que si je pouvais poster d'autres choses, je le ferais bien volontiers, mais bon, certaines choses ayant été developpées dans un cadre professionnel, ca serait un peu genant de les "mettre" à disposition


    A titre d'info, j'avais meme à une époque (sur la base de cette librairie de traduction ) commencer à faire un rapide éditeur à base de datagridview
    pour afficher dans une colonne , l'identifiant et dans les autres , les traductions... (l'idée était de fournir un outil "complet" pour des traducteurs externes et decentraliser par rapport à la société, outil qui puisse les aider à traduire sans avoir besoin d'éditer du code, ou des ressources.. d'ou l'utilisation d'XML plutot que la solution Resource DLL, etc...

    Ravi que des bouts de codes puissent aider des gens

    The Monz, Toulouse

    PS : Si il ya besoin d'améliorations ou de developpement spécifiques, on va dire que je suis "aware"... et "pas cher"

    (Mode pub toute petite OFF

Discussions similaires

  1. Bien créer une application multi-langues ? Unicode ou non ?
    Par Maxime Abbey dans le forum Composants VCL
    Réponses: 28
    Dernier message: 10/09/2007, 17h20
  2. Application Multi-langues en C#
    Par ayobo dans le forum Windows Forms
    Réponses: 2
    Dernier message: 27/11/2006, 16h42
  3. Application multi-langue [Delphi 7]
    Par guence dans le forum Delphi
    Réponses: 3
    Dernier message: 05/09/2006, 12h43
  4. Application multi-langue
    Par JerBi dans le forum EDI
    Réponses: 2
    Dernier message: 15/09/2005, 02h22
  5. [Application multi-langues] Compilateur ou fichier lng ?
    Par Teb dans le forum Composants VCL
    Réponses: 5
    Dernier message: 16/08/2005, 16h48

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