Comment honneur / Hériter des paramètres linguistiques de l'utilisateur dans l'application WinForm?

StackOverflow https://stackoverflow.com/questions/2820843

Question

Je travaille avec les paramètres de la mondialisation dans le passé, mais pas dans l'environnement .NET, qui est le sujet de cette question. Ce que je vois est très certainement en raison de la connaissance que j'ai encore à apprendre, donc je vous serais reconnaissant de l'éclairage sur les points suivants.


Configuration: Mon paramètre de langue par défaut est l'anglais (en-us spécifiquement). J'ai ajouté une deuxième langue (Danois) sur mon système de développement (Windows XP), puis ouvert la barre de langue pour que je puisse sélectionner à volonté.


J'ai choisi danois sur la barre de langue, puis ouvert le Bloc-notes et trouvé la langue anglaise sur revenue à la barre de langue. Je comprends que le réglage de la langue est par application , il semblait que le Bloc-notes réglé par défaut à l'anglais. (J'ai trouvé que étrange depuis Windows et donc le Bloc-notes est utilisé partout dans le monde.) Bloc-notes de clôture est retourné le réglage de la barre de langue danoise. Je me suis alors lancé mon application ouverte WinForm personnalisée - que je sais, ne définit pas la langue - et aussi est revenu Anglais danois lors de l'ouverture, puis de nouveau vers le Danois lorsque terminé

Question 1A: Comment puis-je obtenir ma demande WinForm lors du lancement d'hériter de la configuration actuelle de la barre de langue? Mon expérience semble indiquer que chaque application démarre avec la valeur par défaut du système et nécessite l'utilisateur de modifier manuellement une fois que l'application est en cours d'exécution - cela semble être un inconvénient majeur pour toute personne qui veut travailler avec plus d'une langue

Question # 1B: Si l'on doit, en effet, définir manuellement dans un scénario multi-langue, comment puis-je modifier la langue par défaut du système (par exemple danois) afin que je puisse tester mon le lancement de l'application dans une autre langue?


J'ai ajouté un affichage de la langue en cours dans ma demande pour cette prochaine expérience. Plus précisément, je mis un gestionnaire de MouseEnter sur une étiquette qui a mis son infobulle CultureInfo.CurrentCulture.Name ainsi chaque fois que la souris I sur je pensais que je devrais voir le réglage de la langue. Depuis la mise en la langue avant que je lance mon application ne fonctionne pas, je l'ai lancé alors mis la langue danoise. Je trouve que certaines choses (comme taper dans une zone de texte) honoraient ce paramètre danois. Mais la souris sur l'étiquette instrumenté a montré encore en-nous!

Question 2A: Pourquoi ne CultureInfo.CurrentCulture.Name reflète pas le changement de ma barre de langue alors que d'autres parties de mon application semblent reconnaître le changement? (Essai CultureInfo.CurrentUICulture.Name produit le même résultat).

Question # 2B: Y at-il un événement qui se déclenche sur des changements dans la barre de langue pour que je puisse reconnaître dans mon application lorsque les changements de réglage de la langue

?

Mise à jour 2010.05.13

Les informations courte mais douce fournies par Eric de Microsoft (voir sa réponse ci-dessous) directement adressé une seule de mes quatre questions (# 2A), mais il a fourni tout l'élan que je avais besoin d'approfondir et de comprendre le reste. Pour le bénéfice des autres qui peuvent aussi être embrouillé par cela, voici ce que j'ai découvert:

Réponse # 1A: Application Un réglage de la inherits la langue d'entrée par défaut, pas la langue que vous spécifiez sur la barre de langue. Une fois que votre application est en cours d'exécution, puis change sur la barre de langue être remarqué immédiatement par votre application.

Réponse # 1B:. Réglage de la langue d'entrée par défaut se fait via le panneau de commande Options régionales et linguistiques >> onglet Langues >> Détails >> Paramètres onglet >> langue d'entrée par défaut

Réponse # 2A: Questions traitées par Eric, la culture actuelle est distincte de la langue d'entrée actuelle qui se reflète sur la barre de langue; taper dans une zone de texte est influencée que par la langue d'entrée actuelle.

Réponse # 2B: Il n'y a aucun événement prédéfini pour soit la langue d'entrée ou de la notification en cours de changement de culture. Un fait important à noter ici est que la langue d'entréeles changements sont automatiquement comptabilisés immédiatement alors que les changements en cours de culture ne sont pas. Vous devez redémarrer votre application pour un changement de culture actuelle prenne effet - à moins que vous pouvez remarquer le changement et agir sur vous-même. À cette fin, j'ai trouvé un article MSDN ( Les nombreux visages de la classe CultureInfo ) qui fournit crochet juste comme à remarquer le changement.

Était-ce utile?

La solution

Il y a trois paramètres de langue séparés en jeu. Les commandes de la barre de langue La langue d'entrée ( InputLanguage ) qui est distincte de la langue pour l'affichage de l'interface utilisateur (CurrentUICulture) qui est distincte de la langue pour le tri / de mise en page / analyse syntaxique (CurrentCulture).

Il est vrai que cela est source de confusion.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top