String table ressource

redshirt Messages postés 5 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 3 mars 2003 - 24 févr. 2003 à 14:24
cs_liv Messages postés 49 Date d'inscription lundi 17 mai 2004 Statut Membre Dernière intervention 26 avril 2006 - 26 janv. 2005 à 10:38
Je voudrais creer une application en plusieurs langues. J'essaye donc d'utiliser les string tables. J'en ai cree une en francais et une en anglais. Pour recuperer une chaine j'utilise loadString. Mais je ne sais pas comment selectionner la table suivant la langue. Pourriez vous m'aider ? Merci.

2 réponses

yanousbie Messages postés 2 Date d'inscription mardi 28 septembre 2004 Statut Membre Dernière intervention 14 décembre 2004
14 déc. 2004 à 13:54
Salut,
je n'ai malheureusement pas de solution mais j'ai le même problème. si cela ne t'embête pas peux-tu me décrire ce que tu as déja fait, je planche sur le probleme également, des que j'ai du neuf, je t'en fais part, ciao merci
@+

yann
0
cs_liv Messages postés 49 Date d'inscription lundi 17 mai 2004 Statut Membre Dernière intervention 26 avril 2006
26 janv. 2005 à 10:38
Salut,

Il y a des manières beaucoup plus efficaces de faire des programmes multilangues.
Par exemple, dans ton projet principal tu crées une dll de ressource dans un projet vide. Tu dois avoir autant de dll que de langues.
Si tu as installé les MSDN va sur help://MS.VSCC/MS.MSDNVS.1036/vccore/html/_core_Create_a_Resource.2d.Only_DLL.htm

Ensuite tu copies le fichier .rc de ton programme principal dans celui de ton projet dll.
Tu traduis le fichier .rc de la dll dans la langue que tu veux.

Dans ton code au niveau de l'initialisation de ton programme (InitInstance() par exemple) tu copies le code suivant.
//Chargement de la Dll de langue
HINSTANCE dll;

if(m_Lang == "FR")
dll = LoadLibrary("ResDllFr.dll");

else if (m_Lang == "EN")
dll = LoadLibrary("ResDllEn.dll");

if(dll)
AfxSetResourceHandle(dll);

Lors de la fermture de ton programme tu décharges ta dll avec le code suivant:

HMODULE hDLL = AfxGetResourceHandle();
if (hDLL != AfxGetInstanceHandle())
{
AfxSetResourceHandle(AfxGetInstanceHandle());
FreeLibrary(hDLL);
}


La dll te sera utile pour traduire toutes tes ressources. Par contre si tu as du texte dans ton application (MessageBox, Champ texte dynamique...) indépendant de tes ressources tu devras mettre en place un objet langue à part ne servant qu'à stocker des variables contenant le texte.

Le choix de la langue lui peut se faire via une clé contenue dans un fichier .ini. En fonction de cette clé (FR, EN...), au démarrage de ton application (voir code ci-dessus) tu charges la dll adéquate et tu instancies tes variables texte de ton objet langue.
Le changement de langue ne peut s'effectuer qu'en redémarrant ton application...tu n'as plus qu'à mettre en place une routine te permettant de le faire.

Voilà pour les méthodes....si tu as des questions d'ordre technique n'ésite pas.

. Liv
0
Rejoignez-nous