2009-02-04 10 views
6

J'ai une application qui est pour un marché mondial et doit être localisable. Pendant le développement, j'ai eu quelques problèmes en ce sens que mes assemblages satellites ne semblaient jamais être pris en charge même lorsque je changeais de lieu. Après quelques recherches, je comprends maintenant pourquoi cela est et a pu tester en paramétrant le CurrentUICulture dans le code et en vérifiant que les choses fonctionnaient comme prévu.Dois-je définir Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture par défaut dans mon application?

Maintenant, il s'agit de l'emballage de l'application pour la version et je ne suis pas sûr si la définition de Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture pour le thread en cours lorsque mon application démarre est une bonne idée. Sur le plan positif, mon application sera localisable en changeant les paramètres régionaux (si c'est un côté positif), mais je crains qu'il pourrait y avoir des inconvénients imprévus à cela. Une chose qui me vient immédiatement à l'esprit est que bien que ce que j'ai fait soit bien pour mon fil, cela ne s'appliquera pas (d'après ce que je comprends de la lecture ici et là) à tous les fils créés par mon application (à moins Je mets le CurrentUICulture sur ceux-ci aussi) ou pire par tous les composants que j'utilise qui peuvent créer leurs propres threads.

Pourrait-il y avoir d'autres problèmes? La définition de CurrentCultures est-elle la même chose que la pratique standard ou quelque chose qui est mal vu? Je voudrais être armé avec autant d'informations sur les hauts et les bas de ceci avant de prendre une décision.

Merci

Sam

Répondre

5

Sam, ne plaisante pas avec elle, sauf si vous êtes vraiment sûr de ce que vous faites. Je suppose que nous parlons ici de WinForms. Le framework sélectionne les meilleurs paramètres du système (configurés par l'utilisateur). De votre question, il pourrait s'agir plutôt d'un problème de test. Je mets régulièrement du code après # DEBUG pour choisir une locale à des fins de test.

Mon propre cas d'espèce: mon locale est le néerlandais (nl-NL) mais je cours habituellement des versions anglaises de Windows. Si vous remplacez CurrentUICulture, j'obtiendrais la version néerlandaise (si disponible) qui est généralement OK. Mais je sais d'expérience que certains contrôles/compléments resteront en anglais (y compris les boîtes ShowMessage et les dialogues std). La combinaison est laide.

Mais considérez aussi le cas où vous n'ajoutez pas de satellites correspondant à CurrentCulture. Le système retomberait sur la valeur par défaut dans votre programme, tandis que la culture UI des utilisateurs pourrait être un meilleur choix. Je ne connais pas toutes les règles de repli mais vous pourriez probablement obtenir quelque chose de similaire à:

L'utilisateur exécute les paramètres fr-CA sur les fenêtres fr-FR. Votre programme retombe en-US, l'utilisateur n'est pas content.

Mon conseil:

  • faire quelques essais sur le terrain
  • si vous construisez dans l'override puis utiliser un commutateur à app.config
+0

Merci, toutes les informations utiles. Je suis d'accord avec les principes et pense que nous utiliserons une approche qui permettra d'activer et de désactiver l'option. –

2

question ancienne, mais certains commentaires d'un utilisateur et développeur:

  • Je suis norvégien, mais j'ai un système d'exploitation anglais pour une raison. Je déteste quand les applications apparaissent en norvégien juste parce que mes paramètres régionaux sont norvégiens.
  • J'ai utilisé le Thread.CurrentThread.CurrentCulture avant, et bien qu'il semble fonctionner au début ... alors soudainement vous avez quelque chose qui déclenche un nouveau fil ... (j'ai passé beaucoup de temps à comprendre pourquoi j'ai eu le bon formatage de nombres dans mon application, mais pas dans mes rapports par exemple)
Questions connexes