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

Contribuez C++ Discussion :

[Article][C++]faire un programme multilangues


Sujet :

Contribuez C++

  1. #1
    wogkiller
    Invité(e)
    Par défaut [Article][C++]faire un programme multilangues
    Bonjour,
    j'ai fais ce tuto après avoir longuement cherché des informations sur le net. Puisque j'ai pas trouvé je solution complète qui fonctionnait, je poste la mienne maintenant qu'elle fonctionne parfaitement.

    La solution que je donne se fait avec des dll que l'on charge dynamiquement lorsqu'on le souhaite. Mais attention, je conseil tout de même d'attendre que le programme soit complètement fini avant de faire les dll de langues, sinon il faudra reporter dans chaque langue les modifications!

    1) Dans la solution Visual Studio, ajouter un nouveau projet. Dans le menu "win 32", sélectionnner "projet win32" et mettre un nom au projet. Par exemple "lang_Ang".

    2) Dans le wizard qui apparait, dans "paramètres de l'application"->"Type d'application" choisir "DLL" et cocher "projet vide". Puis faire "Terminer".

    3) Dans le menu "Propriétés" du nouveau projet, puis "éditeur de liens"->"Entrée"->"Toutes bibliothèques par défault ignorées" mettre "OUI(/NODEFAULTLIB)".

    4) Toujours dans "éditeur de liens", "Avancé"->"Aucun point d'entrée" mettre "OUI(/NOENTRY)". Puis "Appliquer" et "ok" pour sortir.

    5) Maintenant sous l'explorateur Windows, copier dans le projet de base les choses suivantes :
    - dossier "res"
    - les fichiers ".rc" et "ressources.h"
    et coller tout ça dans le projet dll qui vient d'être créé.

    6) Vous pouvez maintenant traduire tout ce qui doit l'être dans le projet dll à partir du fichier .rc .

    7) Maintenant, il faut dire au projet principal quelle langue il doit afficher. Pour cela plusieurs option :
    • Au chargement de l'application
    • via un menu langue
    • au chargement de l'application via un fichier de configuration
    Pour la première option, je vous donne un exemple, pour les autres, il suffit d'adapter.

    dans la méthode ::InitInstance() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     /* On charge la dll contenant la langue */
        HINSTANCE dll=LoadLibrary(TEXT("MenuEng.dll"));
        if(dll)  AfxSetResourceHandle(dll);
    et dans ::ExitInstance() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     HMODULE hDLL = AfxGetResourceHandle();
    //comparaison avec le handle de l'instance
    if (hDLL != AfxGetInstanceHandle())
    {
        // si le handle des ressources est <> du handle de l'instance 
        // c'est que les ressouces sont externes !
        // restitution et liberation finale.
        AfxSetResourceHandle(AfxGetInstanceHandle());
        FreeLibrary(hDLL);
    }
    Dernière modification par wogkiller ; 14/05/2008 à 16h02.

  2. #2
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Bonjour et merci pour ta contribution,
    une seul remarque pour le moment, il te manque deux deux tag dans le titre de ton thread (même si il ne sont pas très difficile à deviner, il est plus facile pour nous de traiter les ressources si les bon tag sont mis).
    pour savoir quel tag mettre lit cette discussion

    beaucoup à toi

  3. #3
    wogkiller
    Invité(e)
    Par défaut
    Oups, désolé pour l'oubli, je le règle dessuite

  4. #4
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut

  5. #5
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Cela part d'une bonne intention mais je trouve que le système est très fermé, c'est du windows only (VS C++ only ?) . De plus, je trouve aussi qu'utiliser le système de DLL est assez inaproprié pour ce genre de chose.

    Pour information, il existe en C gettext pour faire ce travail. Mais je ne connais aucun wrapper indépendant à gettext en C++ [1]. Je pense que cela pourrait tre une bonne idée d'en écrire un et de le publier.


    [1]: car il existe ceux de Qt et de KDE.

    PS: un article d'introduction à gettext: http://wiki.nyug.org/gettext
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  6. #6
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut
    Visiblement, on a des trucs dans le standard.
    N'ayant jamais essayé, je ne sais pas ce que cela ça vaut: http://gcc.gnu.org/onlinedocs/libstd.../messages.html

    Sinon, précise effectivement la plateforme que tu vises, etc. Chaque framework généraliste touchant aux IHM va y aller de sa propre façon.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  7. #7
    wogkiller
    Invité(e)
    Par défaut
    je parle de visual studio et de win32 dans le texte... donc vous pouviez en déduire que c'est pour WINDOWS visual studio (MFC)

  8. #8
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut
    Précise-le dans le titre au minimum.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  9. #9
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Davidbrcz Voir le message
    Cela part d'une bonne intention mais je trouve que le système est très fermé, c'est du windows only (VS C++ only ?) . De plus, je trouve aussi qu'utiliser le système de DLL est assez inaproprié pour ce genre de chose.


    voir aussi cette discussion http://www.developpez.net/forums/sho...d.php?t=411087 et mon post http://www.developpez.net/forums/sho...59&postcount=3

    Il me semblait qu'il y en avait une autre avec encore plus de possibilités "ouvertes", mais je ne la retrouve pas..

    [EDIT]

    OK j'ai retrouvé

    c'est ici http://www.developpez.net/forums/sho...d.php?t=296220

    avec un exposé un peu plus détaillé de ma solution ici http://www.developpez.net/forums/sho...58&postcount=8

    [/EDIT]

  10. #10
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    D'ailleur un rédacteur est en train d'écrire un article sur gettext.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

Discussions similaires

  1. Faire un programme qui plante et noter le plantage
    Par cedricgirard dans le forum Langage
    Réponses: 9
    Dernier message: 22/03/2006, 16h36
  2. faire migrer programmation INFORMIX > MYSQL??
    Par idevelopper dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 08/02/2006, 17h12
  3. faire un programme sans interface
    Par timsah dans le forum C++Builder
    Réponses: 8
    Dernier message: 01/02/2006, 10h16
  4. Réponses: 7
    Dernier message: 16/04/2005, 08h55
  5. Faire un programme résident
    Par Bubonik software dans le forum C
    Réponses: 21
    Dernier message: 05/09/2004, 10h28

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