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() :
et dans ::ExitInstance() :
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);
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); }
Partager