2008-11-14 8 views
2

J'ai donc un programme qui doit être multilingue. La seule différence entre ce dont j'ai besoin et ce que j'ai trouvé sur le web est que tous les ordinateurs sur lesquels mon programme sera exécuté sont configurés sur la localisation de EN.Winforms multilingues dans .Net - opinions et suggestions

Nous avons des employés hispanophones qui utiliseront le programme tout comme les employés anglophones. Donc, je ne serai pas en mesure d'établir quelque chose en fonction de la localisation de l'ordinateur, tout devra être fait dans le code.

Je pensais à essayer de créer un fichier XML (en fait, juste un ensemble de données) pour chaque forme que j'ai et de faire en sorte que chaque table de données soit une langue sélectionnable. Dans chaque table, il aurait les informations (nom du contrôle, propriété et texte) pour définir les étiquettes/cases à cocher/etc dont il a besoin. Je vais devoir créer un nouveau contrôle de formulaire afin que je puisse avoir une fonction générique pour passer et renommer tous ces contrôles si possible.

<DataSet> 
    <English> 
    <ControlName>labelHello</ControlName> 
    <ControlProperty>Text</ControlProperty> 
    <Text>Hello</Text> 
    </English> 
    <English> 
    <ControlName>labelBye</ControlName> 
    <ControlProperty>Text</ControlProperty> 
    <Text>Bye</Text> 
    </English> 
    <Spanish> 
    <ControlName>labelHello</ControlName> 
    <ControlProperty>Text</ControlProperty> 
    <Text>Hola</Text> 
    </Spanish> 
</DataSet> 

Aussi je ne savais pas grand-chose sur les chaînes dans le fichier de ressources pour chaque forme. Puis-je le faire à partir de là et utiliser les fonctions .Net pour y parvenir?

Donc je suis prêt pour beaucoup de suggestions parce que je ne veux vraiment pas retourner dans le programme que je viens d'écrire et mettre dans, je déteste revenir et ajouter plus de fonctionnalités une fois que j'ai déjà dépensé beaucoup temps avec cette ventouse ...

Merci

Répondre

2

vous pouvez définir la culture que vous voulez dans le code, par exemple:

Thread.CurrentThread.CurrentUICulture = new CultureInfo("es-ES"); 

Voir this MSDN article pour plus d'informations.

+0

cool. Donc, je suppose que si vous définissez cela pour l'ensemble du fil, tout sera cette culture. Je voudrais être réinitialisé quand il revient à la "page d'accueil". Je suppose que je devrais me remettre à EN moi-même si j'ai utilisé cette méthode. merci – Miles

+0

Tout dans le thread principal utilisera l'UICulture (et/ou Culture) que vous avez défini. Je ne sais pas ce que vous voulez dire en retournant à la page d'accueil - le titre mentionne WinForms et je comprends que la page d'accueil est un concept Web. – Joe

+0

"page d'accueil" est juste la forme principale que j'ai sur mon programme. Ça ouvre les enfants. Donc, si je crée des background workers, étant donné qu'ils sont sur un thread différent, auront-ils le même jeu CurrentUICulture? – Miles

1

C'est une douleur, mais ce n'est pas difficile. Au sein du designer WinForm de VS2008, sélectionnez la forme, afficher ses propriétés et définir localisable = True (si vous affichez la classe/code partiel derrière fichier, vous verrez une nouvelle ligne qui ressemble à quelque chose comme

resources.ApplyResources(this, "$this") 

Ensuite, pour chaque lieu vous voulez soutenir, sélectionnez la langue, et de localiser les modifications nécessaires sur le défaut local.

Je crois que Windows permet à l'utilisateur de spécifier un lieu différent pour une application spécifique. Je dernier essayé avec Windows 2000.

0

Avec Windows, vous pouvez avoir une culture machine EN, mais pour le navigateur, les utilisateurs individuels du PC peuvent sélectionner cultures fermées (IE & Firefox de toute façon). Tout le reste sur PC est l'anglais Dans IE, allez dans outils, Options, cliquez sur le bouton langue dans l'onglet général. Vous pouvez spécifier une hiérarchie de langues préférée.

Sinon, allez avec Joes réponse.