MENUS MULTILINGUES DYNAMIQUES

Messages postés
4947
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
- - Dernière réponse : gillardg
Messages postés
3288
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

Afficher la suite 
sebmafate
Messages postés
4947
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
30 -
Merci de ne pas mettre de commentaire dans zone "Code"
oximoron
Messages postés
149
Date d'inscription
mercredi 23 juillet 2003
Statut
Membre
Dernière intervention
30 janvier 2009
-
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 ?
RICHERBE
Messages postés
4
Date d'inscription
mardi 17 octobre 2006
Statut
Membre
Dernière intervention
5 février 2009
-
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
RICHERBE
Messages postés
4
Date d'inscription
mardi 17 octobre 2006
Statut
Membre
Dernière intervention
5 février 2009
-
J'ai oublié dans le constructeur :
MyManagerImage = new ResourceManager("Masolution.MesImages", MyAssembly);
gillardg
Messages postés
3288
Date d'inscription
jeudi 3 avril 2008
Statut
Membre
Dernière intervention
14 septembre 2014
3 -
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 :)