2010-11-24 6 views
0

Je dois effectuer un contrôle WPF, ce qui permettra à l'utilisateur de sélectionner un fuseau horaire. Ce contrôle doit également prendre en charge plusieurs langues. Par exemple, les noms de fuseaux horaires doivent être affichés dans la langue sélectionnée dans l'application.Sélecteur de fuseau horaire multilingue

.NET 3.5 permet d'obtenir facilement la liste des fuseaux horaires du registre en appelant la méthode TimeZoneInfo.GetSystemTimeZones. Le problème avec cette approche est que cela dépend du système actuel. Cela signifie que différents utilisateurs peuvent avoir une liste de fuseaux horaires différente affichée sur leurs machines. Certaines de ces listes peuvent être obsolètes si l'utilisateur a refusé de mettre à jour son système. Pour résoudre ce problème, vous pouvez obtenir une liste mise à jour en appelant TimeZoneInfo.GetSystemTimeZones sur une machine à jour. Et puis sérialisez-le vers un fichier qui sera déployé avec l'application. De plus, comme cette liste est retournée dans la langue actuelle du système, je devrai générer des listes pour chaque langue sur différentes localisations Windows. Ou faites simplement des traductions manuellement. Avec cette approche, l'utilisateur aura une liste mise à jour à condition qu'il dispose de la dernière version de l'application.

Une autre approche peut être d'utiliser une autre source d'informations de fuseaux horaires, comme tz database. Dans ce cas, j'ai besoin d'utiliser des convertisseurs pour traduire les objets API de fuseau horaire de base de données tz en objets TimeZoneInfo standard.

Quelle approche utilisez-vous ou recommandez-vous dans de tels cas ou dans des cas similaires?

Répondre

1

Je vois comment cela pourrait être problématique.

Option 1:

Pour garder les choses cohérentes je voudrais créer une liste d'une machine mise à jour (votre machine dev par ex.) Et l'inclure dans un fichier de ressources déployé avec votre application. Puis, je prendrais soin de la localisation dans le cadre du processus de localisation normal, c'est-à-dire que les fuseaux horaires seraient traduits avec le reste de l'interface utilisateur.

Option 2:

En supposant une application client-serveur, vous pouvez restreindre l'utilisation du fuseau horaire sur côté client (par exemple toujours l'envoi de réception des temps de UTC et les convertir sur le client), afin que vous puissiez utiliser les fuseaux horaires du système d'exploitation et ne pas avoir à se soucier de ce que ces zones sont réellement.