MENUS MULTILINGUES DYNAMIQUES

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 - 21 janv. 2009 à 11:05
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 - 17 oct. 2009 à 15:52
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/49033-menus-multilingues-dynamiques

gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
17 oct. 2009 à 15:52
bonjour,
c'est très long tout ça.
je suis occupé à étudier le problème actuellement
et ma réflexion m'a amené à penser qu'il serait judicieux de dériver tous les contrôles .Net
en y ajoutant une propriété lang
+ une classe commune avec un tableau de langue as string
et un fichier csv contenant les traductions, mais c'est beaucoup de boulot pour un seul homme :)
RICHERBE Messages postés 4 Date d'inscription mardi 17 octobre 2006 Statut Membre Dernière intervention 5 février 2009
5 févr. 2009 à 11:07
J'ai oublié dans le constructeur :
MyManagerImage = new ResourceManager("Masolution.MesImages", MyAssembly);
RICHERBE Messages postés 4 Date d'inscription mardi 17 octobre 2006 Statut Membre Dernière intervention 5 février 2009
5 févr. 2009 à 11:04
Il est plus général d'utiliser ResourceManager qui permet d'utiliser un fichier externe contenant tout les Textes que vous êtes amené à utiliser traduit dans toutes les langues utilisées.
Dans une class "Langue" :
- dans le constructeur de la Class vous rajoutez :
public Assembly MyAssembly;
public ResourceManager MyManager;
public ResourceManager MyManagerImage;
MyAssembly = Assembly.GetExecutingAssembly();
MyManager = new ResourceManager("Masolution.MesTextes", MyAssembly);
InitializeComponent();

- Dans cette classe vous rajoutez une fonction (exemple):
public String MMGS(String NumMsg)
{
.
.
return MyManager.GetString("M" + CodeLangue + NumMsg)
.
.
}

CodeLang doit être une variable public initialisée au code langue en cours comme par exemple "FR" pour le français, "EN" pour l'anglais, "DE" etc...
Dans ce cas il faut créer un fichier (MesTextes.txt) des Textes à utiliser comme par exemple
MFR001= texte 1 en Français
MEN001= texte 1 en anglais
MDE001= texte 1 en allemand
etc...
Ensuite dans le projet il faut rajouter une resource par exemple :
MesTextes.resx
Ensuite il faut génrer le fichier resource en utilisant l'utilitaire resgen qui
se trouve dans ....\SDK\V2.0\bin
commande : resgen MesTextes.txt MesTextes.resx

Enfin dans votre programme quand vous souhaitez initialiser un Menu, un label.Text, un TextBox.Text, un GroupBox.Text etc... bref tout ce que vous afficher, vous appelez la routine MMGS.
Dernier pb que vous aurez à résoudre la MessageBox.Show qui elle n'utilise pas la langue de CultureInfo etc.. mais dépend tout simplement de la langue du système d'exploitation et qui par conséquent si vous avez installer Windows en français les boutons de vos message seront toujours OUI, NON etc..
Une seule solution si vous voulez que votre applicatif parle totalement la langue choisie, faire votre propre Class MessageBOx et gérer les textes des boutons dans les langues que vous voulez en utilisant la routine MMGS.
Vous pouvez aussi utiliser cette méthode pour récupérer les Drapeaux de votre langue en créer une resource MesImages.resx et un appel à Resource Manager comme
par exemple :
pictureBoxDrapeu.Image = (Bitmap) MyManagerImage.GetObject("Nom de l'image");

Bon courage
oximoron Messages postés 149 Date d'inscription mercredi 23 juillet 2003 Statut Membre Dernière intervention 30 janvier 2009
22 janv. 2009 à 13:34
Salut,
Quelques points ou tu pourrais peut être m'éclairer :
- On ne peut plus ouvrir la fenêtre en designer (dans ton projet d'exemple).
- On est obligé de construire son menu dynamiquement (enfin j'ai pas réussi à le faire toujours par le designer de visual) ça va pour les menus simples, mais quand on commence avoir un menu avec images et sous menus c'est un peu plus long en code ...
- Avoir les traductions dans un(des) fichier(s) plutôt qu'au fin fond du code en dur.
- Ça traduit uniquement les menus ... c'est pas plus simple de faire une classe de traduction qui va s'adapter au type du contrôle, plutôt qu'adapter tous les contrôles ?
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
21 janv. 2009 à 11:05
Merci de ne pas mettre de commentaire dans zone "Code"
Rejoignez-nous