[C#.NET] Gestion du multilingue ?

Gestion du multilingue ? [C#.NET] - C#/.NET managed - Programmation

Marsh Posté le 05-10-2006 à 16:09:31    


Bonjour,
 
Je suis tombé sur ce tutorial en googlant:
http://morpheus.developpez.com/localisationdotnet/
 
Cela m'a bien aidé, cependant j'ai encore un probleme: j'ai une appli avec des menus, et je les ai traduits (via la Gui, en changeant la prop "Language" ). Maintenant, j'aimerais faire comme dans le tutorial, cad changer la langue en execution via un element du menu.
 
J'ai bindé l'action
 

Code :
  1. System.Threading.Thread.CurrentThread.CurrentUICulture = EnglishCulture;


 
à cet élément du menu, mais quand je l'actionne, rien ne se passe. C'est surement dû au fait que l'affichage des textes n'est pas mis à jour. Ma question: comment forcer la mise à jour des elements du menu ? Autant pour un Label ou autre chose, le tutorial l'explique, autant la je bloque ^^
 
Merci d'avance :)
 
 :hello:


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

Marsh Posté le 05-10-2006 à 16:09:31   

Reply

Marsh Posté le 05-10-2006 à 20:23:41    

ParadoX a écrit :


à cet élément du menu, mais quand je l'actionne, rien ne se passe. C'est surement dû au fait que l'affichage des textes n'est pas mis à jour. Ma question: comment forcer la mise à jour des elements du menu ? Autant pour un Label ou autre chose, le tutorial l'explique, autant la je bloque ^^
 
Merci d'avance :)
 
 :hello:


il ne suffit pas de définir la culture courante du thread, il faut aussi mettre les textes à jour via la méthode GetString() de ton ResourceManager.
voici ce qui se passe quand je définis la langue de mon plugin en anglais par exemple :

Code :
  1. // d'abord le handler prenant en charge le controle radio
  2. private void radioEnglish_CheckedChanged(object sender, EventArgs e)
  3. {
  4.    if (!radioEnglish.Checked)
  5.       return;
  6.    UpdateLabels(EnglishCulture);
  7. }
  8. // puis la fonction qui met à jour les chaines de caractères
  9. private void UpdateLabels(CultureInfo culture)
  10. {
  11.    Thread.CurrentThread.CurrentUICulture = culture;
  12.    lblNPPattern.Text = rm.GetString("Config_PluginConfig_NPPattern" );
  13.    lblPassword.Text = rm.GetString("Config_Generales_Pass" );
  14.    lblProxyPort.Text = rm.GetString("Config_PluginConfig_ProxyPort" );
  15.    lblProxyURL.Text = rm.GetString("Config_PluginConfig_ProxyUrl" );
  16.    lblProxyLogin.Text = rm.GetString("Config_PluginConfig_ProxyLogin" );
  17.    lblProxyPass.Text = rm.GetString("Config_PluginConfig_ProxyPass" );
  18.    chkProxy.Text = rm.GetString("Config_PluginConfig_ProxyUse" );
  19.    lblPseudo.Text = rm.GetString("Config_Generales_Pseudo" );
  20.    lblReading.Text = rm.GetString("Config_PluginConfig_SigLecture" );
  21.    lblStop.Text = rm.GetString("Config_PluginConfig_SigStop" );
  22.    chkPluginOn.Text = rm.GetString("Config_PluginConfig_Actif" );
  23.    chkDiscofeel.Text = rm.GetString("Config_PluginConfig_SiteActif" );
  24.    cmdValider.Text = rm.GetString("Config_BtValider" );
  25. }


 
edit: d'ailleurs je viens de me rendre compte que le paramètre culture de ma fonction UpdateLabels est inutile, il suffirait juste que je définisse la culture du thread dans le handler.


Message édité par Harkonnen le 05-10-2006 à 20:27:29

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 05-10-2006 à 20:39:16    

Hm d'après le tuto, j'avais compris ça, mais ... ma question était plutot orientée vers les Textes des Menus. Avec VS2005, on peut renommer les menus avec la GUI (en changeant la prop Language de la form). En faisant ça, il écrit automatiquement le texte en fonction de la langue dans le fichier de ressources.  
 
Maintenant à quoi ça sert si je dois quand meme redéfinir à la main la propriété .Text ? (seulement pour les menus, hein :))


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

Marsh Posté le 05-10-2006 à 20:45:23    

faut pas oublié que la propriété "LOCALISABLE" doit etre à true de la fenêtre concerné.  
 
Sinon, je peux te filer une fonction demain qui te traduira tout cela... faut juste que je la retrouve au boulot demain.

Reply

Marsh Posté le 05-10-2006 à 20:49:25    

moi23372 a écrit :

faut pas oublié que la propriété "LOCALISABLE" doit etre à true de la fenêtre concerné.  
 
Sinon, je peux te filer une fonction demain qui te traduira tout cela... faut juste que je la retrouve au boulot demain.


 
Yep, comme montré ds le tuto, j'ai mis localisable à true :) D'ailleurs, j'imagine qu'il faut le faire pour toutes les forms concernées, non ?
Et sinon, la fonction, je veux bien, mais ... elle traduit quoi en quoi ? ^^


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

Marsh Posté le 05-10-2006 à 21:37:15    

Sinon, une autre solution, c'est de rappeler juste après le changement de culture :
 

Code :
  1. this.Controls.Clear();
  2. InitializeComponent();


 
Testé : ça marche.
Par contre, ça réinitialise toute la form, donc si y'a un traîtement en cours ou des modifications effectuées par l'utilisateur bah...
 
L'intérêt, c'est quand même que t'es sûr d'appliquer la modif à tous les contrôles de la form, sans risque d'en oublier un.

Message cité 1 fois
Message édité par MagicBuzz le 05-10-2006 à 21:39:18
Reply

Marsh Posté le 05-10-2006 à 21:43:22    

MagicBuzz a écrit :

Sinon, une autre solution, c'est de rappeler juste après le changement de culture :
 

Code :
  1. this.Controls.Clear();
  2. InitializeComponent();


 
Testé : ça marche.
Par contre, ça réinitialise toute la form, donc si y'a un traîtement en cours ou des modifications effectuées par l'utilisateur bah...
 
L'intérêt, c'est quand même que t'es sûr d'appliquer la modif à tous les contrôles de la form, sans risque d'en oublier un.


 
Je tente ça demain, merci :)


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

Marsh Posté le 05-10-2006 à 22:50:00    

J'oubliais : le second intérêt, c'est que tu peux décider d'utiliser des layout / images différents selon la langue.
 
Par exemple, afficher "ParadoX France" sous forme d'image quant t'es en "fr-fr", "ParadoX US" sous forme d'une autre image, d'une autre taille, pour la version "en-us".
 
Et surtout, si tu fais une version arabe, tu voudras que la fenêtre soit positionnée de droite à gauche et non l'inverse.
 
Avec mon système, ça marche "tout seul".
Avec le système d'Harko, ça marche aussi, mais faut appliquer les ressources pour chaque propriété de chaque élément, ce qui peut rapidement s'avérer cauchemardesque.


Message édité par MagicBuzz le 05-10-2006 à 22:51:35
Reply

Marsh Posté le 05-10-2006 à 22:57:07    

Yep, c'est pas con du tout :jap:  
Puis pour ce qui est des modifications perdues lors du changement langue, c'est pas si dramatique que ça, pis c'est toujours mieux que de faire redémarrer l'application à l'utilisateur :)


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed