Quelle est la différence entre les propriétés CurrentCulture et CurrentUICulture de CultureInfo dans .NET?

359

Dans .NET, il y a la CultureInfoclasse dans l' System.Globalizationespace de noms. Il a deux propriétés similaires qui renvoient toutes deux des valeurs de CultureInfotype: CurrentCultureet CurrentUICulture.

Quelle est la différence entre eux?

Lequel devrais-je utiliser quand et pourquoi?

splattne
la source
28
Gardez à l'esprit que Microsoft, dans leur sagesse, ne sépare pas les cultures de l'interface utilisateur de l'anglais américain et de l'anglais (britannique) ou d'autres anglais. Il n'y a pas de MUI pour l'anglais, ce qui signifie que le CurrentUICulturesera toujours en-US sur une machine de langue anglaise, quel que soit le CurrentCulture, qui peut être défini pour localiser les paramètres régionaux.
nicodemus13
11
Oui. Je suis au Royaume-Uni et je trouve CurrentCulture"en-GB", mais CurrentUICulture"en-US".
Colonel Panic
Je viens de trouver cet article expliquant cela en détail: github.com/jbe2277/waf/wiki/CurrentCulture-vs.-CurrentUICulture
RinoTom

Réponses:

347

CurrentCultureest la représentation .NET des paramètres régionaux utilisateur par défaut du système. Cela contrôle la mise en forme par défaut des nombres et des dates, etc.

CurrentUICulture fait référence à la langue de l'interface utilisateur par défaut, un paramètre introduit dans Windows 2000. Il s'agit principalement de la partie localisation / traduction de l'interface utilisateur de votre application.

Quelles que soient les options régionales pour lesquelles le système est configuré, ce sont les valeurs "actuelles" de votre application .NET.

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 ce CurrentCultureserait l'allemand, mais je préfère aussi toutes mes applications en anglais, donc ce CurrentUICultureserait l'anglais.

Il y a un bel article sur le sujet: Tout trier: Pourquoi nous avons à la fois CurrentCulture et CurrentUICulture

Tomalak
la source
5
En fait, cela pourrait être une bonne alternative pour une explication approfondie: forums.asp.net/post/1080435.aspx
Michael12345
@ Michael12345 Merci pour l'astuce. J'ai mis à jour le lien. Le message auquel vous liez est également décent, peut-être même mieux.
Tomalak
5
Ce sont des noms terribles, car CurrentUICulture signifie vraiment CurrentLanguageCulture et CurrentCulture signifie vraiment CurrentDataCulture.
Pxtl
2
@Pxtl: j'opterais pour CurrentFormattingCulture plutôt que CurrentDataCulture . Cependant, notez que ceux-ci peuvent ne pas être aussi manifestement disjoints que même vos noms le suggèrent. Par exemple, je dirais que le format de date longue ( D) peut contenir une certaine "langue": en-USrenvoie "vendredi 6 avril 2018", tandis que ru-RUrenvoie "6 апреля 2018 г.".
OR Mapper
107

C'est une astuce simple que j'utilise pour me rappeler laquelle utiliser:

(date, currency, double).tostring = CurrentCulture

resource.fr-CA.resx file = currentUICulture
Foxontherock
la source
Si l' on doit faire confiance aux commentaires de nicodemus13 et du colonel Panic , il semblerait que la deuxième partie de votre astuce ne devrait pas fonctionner.
OR Mapper du
15

Un bon moyen de faire la différence en plus des belles explications fournies par les autres utilisateurs, et un aspect important dans le développement d'applications Web est le suivant:

  • CurrentCulturereprésente la configuration du serveur Web. Par exemple, si votre application Web ASP.NET est hébergée en Allemagne, la valeur de CutlureInfo.CurrentCultureserait très probablement de-DE. Ainsi, la .ToString()mise en forme par défaut pour les IFormattabletypes utiliserait les mises en forme allemandes par défaut ou celles qui ont été configurées sur le système d'exploitation du serveur comme valeurs par défaut.

  • CurrentUICulturepeut être capturé à partir de l'agent utilisateur et peut représenter la culture de l'interface utilisateur du client se connectant au site Web. Par exemple, si vous chargez ce site Web de la Russie, vos paramètres locaux sont configurés pour utiliser la langue russe, et votre agent utilisateur envoie vos paramètres régionaux sur le serveur (Opera et IE font automatiquement, pas sûr pour Chrome et FireFox), le CurrenUICultureserait représenter ru-RU. Cela entraînera que toutes les ressources comme 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).

Ivaylo Slavov
la source
13

Différences:

  1. CurrentCultureest pour le formatage des dates et de la monnaie tout en CurrentUICultureallant avec la langue / traductions. Il sera utilisé par ResourceManagerpour rechercher des ressources par culture.
  2. Namespace de CurrentCultureclasse est en System.Globalizationtout CurrentUICulturevient de System.Threading.
  3. CurrentCultureest conservé sur différentes demandes de la session, mais CurrentUICulturedoit être défini à chaque demande.

Ressemblance:

Ce sont tous les deux des System.Globalization.CultureInfoinstances.

Matas Vaitkevicius
la source
8

Il convient de noter que le CurrentUICultureprend en charge les paramètres régionaux non spécifiques à un pays tels que «en» (cultures neutres), alors qu'il ne CurrentCultureprend en charge que les paramètres régionaux spécifiques à un pays tels que «en-GB». Mettre CurrentCultureà une culture neutre jettera un ArgumentException.

Je suppose que cela est dû au fait que les formats tels que les dates et les devises sont plus étroitement liés au pays lui-même, mais la langue affichée est souvent interchangeable entre les pays.

Sebris87
la source