2010-07-14 3 views
0

Je suis nouveau à OOD donc j'ai une question sur l'utilisation des classes pour créer une interface utilisateur multilingue. Je voudrais créer une classe qui est disponible pour tous les formulaires dans mon application afin que je puisse changer la langue de l'interface utilisateur quand je veux. L'idée de base est de conserver les ressources de langage dans les fichiers XML et de créer des liaisons de données pour tous les contrôles afin que la propriété Text soit modifiée chaque fois que je charge un nouveau fichier de ressources de langue. J'ai fini par créer des liaisons pour tous les contrôles de la forme principale de l'application et lorsque le formulaire charge les chaînes de lecture de la source de données de la source de liaison à partir des champs d'une classe de stockage de langue. Tout est ok avec ceci jusqu'à ce que je veux changer la langue d'interface utilisateur de tous les autres formes simultanément. La liaison de données pour les classes statiques ne semble pas fonctionner ou je suis juste trop bête pour l'utiliser.besoin d'aide avec des classes pour l'interface utilisateur multilingue

.NET 3.5, C#, VS2008 express

+0

Quelle plate-forme utilisez-vous, WPF ou WinForms? –

+0

J'utilise WinForms – beastofman

+0

Faites en sorte que le changement de langue dans votre classe statique déclenche également l'actualisation de vos formulaires. –

Répondre

0

Solution POUR WPF

Vous devez créer des fichiers XML, le premier contiendra la localisation des contrôles statiques (moyens de commande commandent que d'y acquérir des chaînes de localisation sur OnApplyTemplate point), la seconde contiendra des chaînes de localisation pour les formulaires dynamiques comme un MessageBox ou partout où vous allez changer de contrôle dynamique. Ensuite, pour les chaînes dynamiques, vous devez trier enum, quelles valeurs doivent être des clés de DynamicStrings.xml (par exemple).

Ceci est la base. Ensuite, lors d'un changement de langue, vous devez remplir deux dictionnaires avec des clés et des valeurs pour les deux types de chaînes de localisation. Aussi, vous aurez besoin du gestionnaire, qui se souciera de savoir comment obtenir une chaîne de béton pour chaque endroit dont il a besoin.

Pour les contrôles: se lient à une propriété de chaîne, par exemple, nommez-EmptyText, puis écrire convertisseur qui obtenir en tant que paramètre de conversion clé de valeur dictionnaire statique et retour de cette clé:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      if (parameter != null && parameter is string) 
         return MessageManager.Instance.GetUITextById((string)parameter); 
      return value; 
     } 

Pour dynamique contrôles: passer simplement comme paramètres d'initialisation pour les méthode de votre Responsable:

MessageBox.Show(MessageManager.Instance.GetDynamicMessage(Messages.HelloWorldMessage)); 

Où TéléMessagerie (utilisation de modèle singleton) - est vous classe qui gère toutes vos manipulations de localisation avec xmls et dictionnaires, GetDynamicMessage obtiendra la chaîne par la valeur enum de DynamicDictionary, Messages - votre enum.

+0

Il utilise ** Windows Forms ** comme indiqué dans son commentaire. –

+0

Eugene, merci pour la réponse. Motif Singleton semble approprié pour mon application, donc je vais essayer de l'utiliser – beastofman