none
changement de la langue d'un window form RRS feed

  • Question

  •  

    Bonjour à tous,

     

    Je suis en train de développer une windows form bilingue (français-anglais)et j'aimerai que lorsque l'on choississe une langue, que mon interface change immédiatement. J'ai essayé de rappeler InitializeComponent() mais cela ne fonctionne pas. Comment je peux procéder?

     

     Merci pour votre aide

     

    mercredi 19 septembre 2007 15:52

Réponses

Toutes les réponses

  • Salut,

     

     

    Cet article devrait t'aide: http://morpheus.developpez.com/LocalisationDotnet/

     

     

     

    A+ Smile

    mercredi 19 septembre 2007 19:55
  •  

    Salut,

    merci pour l'article mais il ne m'a pas beaucoup aidé. Ma fenêtre contient plusieurs objets et j'ai trouvé une solution qui est de supprimer tous les contrôles de mon formulaire et de redessiner ceux-ci dans la langue sélectionnée: 

     

    this.Controls.Clear();

    InitializeComponent();

     

    le problème que je rencontre en ce moment est le fait que lors de cette reinitialisation, les contrôles ne sont pas redessinés comme je voudrais. Je crois que la propriété Anchor n'a plus aucun effet.

     

    Si quelqu'un a une idée, merci d'avance

    jeudi 20 septembre 2007 08:59
  • Etrange car mon article correspont exactement à ce que tu souhaites faire: mettre en place la localisation d'une application....

    jeudi 20 septembre 2007 10:26
  • Bonjour,

     

    Les ressources n'étant chargées qu' au démarrage du formulaire, il faut effectivement les recharger après un changement de la UICulture.

     

    Je propose ce code générique que vous pourrez adapter pour répondre à votre cas:

    Code Snippet

     

    // On instancie un ResourceManager

    System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));

     

    // on ré-applique les ressources sur le formulaire
    resources.ApplyResources(this, this.Name);

     

    // on réapplique les ressources sur tous les contrôles enfants ( uniquement au premier niveau , il manque le code pour tous les autres niveaux )
    foreach (Control myControl in this.Controls)
                {
                    resources.ApplyResources(myControl, myControl.Name);
                }           

    // enfin, on force le formulaire et tous ses contrôles enfants à se réafficher
    this.Invalidate(true); 

     

     

    vendredi 21 septembre 2007 14:18
  • J'ai pris la solution d'Henri en remplacant juste la partie de code suivante

    // on ré-applique les ressources sur le formulaire
    resources.ApplyResources(this, this.Name);

     

    // on réapplique les ressources sur tous les contrôles enfants ( uniquement au premier niveau , il manque le code pour tous les autres niveaux )
    foreach (Control myControl in this.Controls)
                {
                    resources.ApplyResources(myControl, myControl.Name);
                }   



    par un appel à

    TranslateControl(this, resources);

    qui est une fonction récursive pour avoir tous les niveaux

    private void TranslateControl(Control ctr_p, ComponentResourceManager res_p)
    {


    res_p.ApplyResources(ctr_p, ctr_p.Name, Thread.CurrentThread.CurrentUICulture);

    if (ctr_p.Controls != null)
    {
    foreach (Control myControl in ctr_p.Controls)
    {
    TranslateControl(myControl,res_p);
    }
    }
    }

    vendredi 23 janvier 2009 17:33
  • L'article cité par Thomas LEBRUN décrit parfaitement la méthode à utiliser pour avoir un applicatif Multi-langue.
    Je rajouterais qu'au démarrage le l'applicatif  dans l'évènement Load par exemple il faut initialiser tout les controls du form y compris le titre etc.. dans la langue choisie et de préférence dans une routine à part.
    En effet si vous permettez à l'utilisateur de changer de langue en cours de route, via un ascenseur sur le Form, il faudra dans le traitement de cet ascenseur faire appel à cette routine pour changer tout les Text dans la nouvelle Langue.
    Dernier détail, si vous utiliser la Class MessageBox pour afficher des messages avec les boutons classique yes, no, cancel il faut savoir que la langue de ces boutons ne dépend pas de CultureInfo etc... mais est liée au système d'exploitation installé sur l'ordinateur.
    Donc si votre systeme d'exploitation est le Français vos boutons seront toujours "Oui", "Non" etc..
    Une seule solution créer votre propre MessageBox.
    Vous avez un excellent exemple dans le CodePlex sous le nom InformationBox 
    Cordialement
     
    riri
    dimanche 1 février 2009 12:06