Loading...
 
Multi-Language Add-In for Visual Studio

Multi-Language Add-In for Visual Studio


Génération et utilisation de ml_UpdateControls()

Bonjour Phil,

J'utilise depuis quelques jours Multilaguage Add In pour visual studio dans un projet développé en c#. (Bon outil et facile à utiliser :-) )

J'ai deux remarques à formuler :

1 - J'ai une forme implémentée dans un premier fichier (frmMain.cs par exemple) et trois autres fichiers frmMain_1.cs, frmMain_2.cs et frmMain_3.cs. Ces trois fichiers implémentent la même forme que dans le fichier frmMain.cs avec l'tuilisation de "Partial class". ML a généré dans chaque fichier la méthode private void ml_UpdateControls(), ce qui ne fonctionne pas. J'ai dû supprimer cette méthode. Ce n'est pas grave mais autant ne pas la générer :-) !

2 - Le changement de langue en run-time est réalisée grace à l'event MLRuntime.MLRuntime.LanguageChanged. Ceci fonctionne très bien avec les fenêtres créées une fois pour toute. Mais pour les fenêtres créées dynamiquement en run-time, cela ne marche pas puisqu'elles ne sont pas forcément instanciées au moment du changement de langue. J'ai juste ajouter un appel à la méthode ml_UpdateControls() dans chaque constructeur de fenêtre et j'obtiens le fonctionnement désiré. Est-ce que cela pourrait aussi être généré ou y a t'il une autre façon de faire ?


Une réponse en anglais me conviendrait parfaitement.

Merci,
Jerome

Germany

Salut Jerome

C'est un plaisir de répondre en français! J'espère qu'on pourra le comprendre.

En ce qui concerne ta première remarque, je n'ai pas testé ce scénario, mais je reconnais que c'est un problème avec l'Add-In. Je vais essayer de le corriger rapidement.

Concernant la deuxième remarque, quelque chose ne fonctionne pas correctement. Normalement, quand on change la langue, il faut faire deux choses:

  • Changer le propriété CurrentUICulture de la thread actuelle, par example
    Thread.CurrentThread.CurrentUICulture = SelectedCulture;

  • Générer l'event MLRuntime.MLRuntime.LanguageChanged


Si tu as changer la propriété CurrentUICulture de la thread actuelle, toutes les nouvelles fenêtres devraient employer cette langue automatiquement.
Pour ma part, c'est la meilleure façon d'implémenter cette fonctionnalité.

Je viens de le essayer avec le programme d'exemple SimpleEditor (Step4) en changeant la langue et puis en ouvrant la fenêtre les "à propos de", et cela a fonctionné bien. J'ai le soupçon que tu n'as pas changer la propriété CurrentUICulture.

Néanmoins, il existe un moyen d'ajouter la fonction ml_UpdateControls du constructeur pour chaque forme, qui consiste à sélectionner le support d'exécution alternatif. On peut choisir cette option dans la fenêtre de propriétés du projet, sous le cinquième bouton de la barre d'outils.

Ensuite, lorsque on ajoute le support d'exécution, une autre fenêtre apparaît, qui est très similaire à la fenêtre pour ajouter le support pour le changement de langue en run-time. Au point où la méthode normale assigne Localizable=Vrai pour chaque forme, la méthode alternative assigne Localizable=Faux et emploie seulement le fonction ml_UpdateControls pour mettre à jour la langue.

J'ai programmé cette méthode alternative d'abord pour des projets de SmartDevice avec Visual Studio 2003, mais il n'est plus nécessaire avec les versions plus récentes.

Cordiallement
Phil
9ème Avril 2008

Bonjour Phil,

Merci de ta réponse en français parfaitement compréhensible.

Je n'avais pas oublié de changer la propriété CurrentUICulture, mais j'ai dû faire une mauvaise manipulation et toutes mes formes avaient la propriété Localizable = false. Voilà la raison pour laquelle cela ne fonctionnait pas.

Cordialement,
Jerome
10 Avril 2008