2008-11-30 13 views
304

Dans .NET, il existe la classe CultureInfo dans l'espace de noms System.Globalization. Il a deux propriétés similaires renvoyant toutes deux des valeurs du type CultureInfo: CurrentCulture et CurrentUICulture.Quelle est la différence entre les propriétés CurrentCulture et CurrentUICulture de CultureInfo dans .NET?

Quelle est la différence entre eux?

Lequel dois-je utiliser quand et pourquoi?

+25

Gardez à l'esprit que Microsoft, dans leur sagesse, ne sépare pas les cultures UI de l'anglais américain et anglais (britannique) ou d'autres anglais. Il n'y a pas de MUI pour l'anglais, ce qui signifie que 'CurrentUICulture' sera toujours en-US sur une machine de langue anglaise, indépendamment de' CurrentCulture', qui peut être défini pour localiser les paramètres régionaux. – nicodemus13

+9

Oui. Je suis au Royaume-Uni et je trouve 'CurrentCulture' est 'en-GB', mais' CurrentUICulture' est 'en-US'. –

Répondre

297

CurrentCulture est la représentation .NET des paramètres régionaux utilisateur par défaut du système. Ceci contrôle le format par défaut des nombres et des dates et autres.

CurrentUICulture fait référence à la langue de l'interface utilisateur par défaut, un paramètre introduit dans Windows 2000. Cela concerne principalement la partie localisation/traduction de l'interface utilisateur de votre application. Quelles que soient les options régionales configurées pour le système, les valeurs "Actuelles" de votre application .NET sont définies.

Souvent, ils sont tous les deux identiques. Mais sur mon système ils seraient différents: je préfère mes numéros et dates au format allemand, donc le CurrentCulture serait allemand, mais je préfère aussi toutes mes applications en anglais, donc le CurrentUICulture serait anglais.

Il y a un bel article sur le sujet: Sorting it all Out: Why we have both CurrentCulture and CurrentUICulture

+4

En fait, cela pourrait être une bonne alternative pour une explication en profondeur: http://forums.asp.net/post/1080435.aspx – Michael12345

+0

@ Michael12345 Merci pour l'indice. J'ai mis à jour le lien. Le message que vous liez est aussi décent, peut-être même mieux. – Tomalak

+2

Ce sont des noms terribles, car CurrentUICulture signifie vraiment CurrentLanguageCulture et CurrentCulture signifie CurrentDataCulture. – Pxtl

97

C'est une astuce simple que j'utilise pour se rappeler que l'on à utiliser:

(date, currency, double).tostring = CurrentCulture 

resource.fr-CA.resx file = currentUICulture 
2

Différences:

  1. CurrentCulture est pour le formatage des dates et des devises tandis que CurrentUICulture va avec la langue/les traductions. Il sera utilisé par ResourceManager pour rechercher des ressources par culture.
  2. L'espace de nom de CurrentCulture classe est dans System.Globalization tandis que CurrentUICulture provient de System.Threading.
  3. CurrentCulture persiste sur les différentes demandes de la session tandis que CurrentUICulture doit être défini à chaque requête.

Ressemblance:

Ils ont tous deux sont des instances System.Globalization.CultureInfo.

8

Une bonne façon de faire une différence en plus des explications agréables effectuées par d'autres utilisateurs, et un aspect important dans le développement d'applications Web est la suivante:

  • CurrentCulture représente la configuration du serveur Web. Par exemple, si votre application Web ASP.NET est hébergée en Allemagne, la valeur CutlureInfo.CurrentCulture sera probablement de-DE. Ainsi, la mise en forme par défaut .ToString() pour les types IFormattable utiliserait les formats allemands par défaut, ou ceux qui ont été configurés sur le système d'exploitation du serveur comme valeurs par défaut.

  • CurrentUICulture peut être capturé à partir de l'agent utilisateur, et peut représenter la culture d'interface utilisateur du client se connectant au site Web. Par exemple, si vous chargez ce site Web depuis la Russie, vos paramètres locaux sont définis pour utiliser la langue russe et votre agent utilisateur envoie vos paramètres régionaux au serveur (Opera et IE le font automatiquement, pas sûr pour Chrome et FireFox), le CurrenUICulture représenterait ru-RU. Cela entraînera que toutes les ressources telles que les chaînes localisées récupérées via ResourceManager ou les expressions de localisation dans les fichiers ASP.NET aspx/ascx soient en russe (si des traductions sont disponibles).

3

Il convient de noter que le CurrentUICulture supporte les locales non spécifiques des pays tels que 'en' (cultures neutres) alors que CurrentCulture ne supporte que des endroits spécifiques de pays comme «en-GB. Si vous définissez CurrentCulture sur une culture neutre, vous obtiendrez un ArgumentException. Je suppose que c'est parce que les formats tels que les dates et les devises sont plus fortement liés au pays lui-même, mais la langue affichée est souvent interchangeable entre les pays.