gillardg
Messages postés3275Date d'inscriptionjeudi 3 avril 2008StatutMembreDernière intervention14 septembre 20142 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és4Date d'inscriptionmardi 17 octobre 2006StatutMembreDerniè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és4Date d'inscriptionmardi 17 octobre 2006StatutMembreDerniè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és149Date d'inscriptionmercredi 23 juillet 2003StatutMembreDernière intervention30 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és4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 201437 21 janv. 2009 à 11:05
Merci de ne pas mettre de commentaire dans zone "Code"
17 oct. 2009 à 15:52
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 :)
5 févr. 2009 à 11:07
MyManagerImage = new ResourceManager("Masolution.MesImages", MyAssembly);
5 févr. 2009 à 11:04
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
22 janv. 2009 à 13:34
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 ?
21 janv. 2009 à 11:05