Quelle est la différence entre Culture et UICulture?

126

Quelqu'un pourrait-il me donner un peu plus d'informations sur la différence entre Cultureet UICulturedans le framework .NET? Que font-ils et quand utiliser quoi?

Niklas
la source

Réponses:

148

Cultureaffecte la façon dont les données dépendant de la culture (dates, devises, nombres, etc.) sont présentées. Voici quelques exemples:

var date = new DateTime(2000, 1, 2);
var number = 12345.6789;

Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
Console.WriteLine(date); // 02.01.2000 00:00:00
Console.WriteLine(number.ToString("C")); // 12.345,68 €

Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-CA");
Console.WriteLine(date); // 2000-01-02 00:00:00
Console.WriteLine(number.ToString("C")); // 12 345,68 $

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Console.WriteLine(date); // 1/2/2000 12:00:00 AM
Console.WriteLine(number.ToString("C")); // $12,345.68

La culture affecte également l'analyse des entrées utilisateur de la même manière:

const string numberString = "12.345,68";
decimal money;

Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
money = decimal.Parse(numberString); // OK!

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
money = decimal.Parse(numberString); // FormatException is thrown, TryParse would return false

Méfiez-vous des cas où l'analyse réussit, mais le résultat n'est pas ce à quoi vous vous attendez.

const string numberString = "12.345";
decimal money;

Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
money = decimal.Parse(numberString); // 12345

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
money = decimal.Parse(numberString); // 12.345, where the . is a decimal point

UICultureaffecte le fichier de ressources (Resources. lang .resx) qui sera chargé par votre application.

Donc, pour charger des ressources allemandes (vraisemblablement du texte localisé), vous définiriez UICulturela culture allemande et afficher le formatage allemand (sans aucun impact sur les ressources chargées) que vous définiriez Culture.

dee-voir
la source
39
Ce qui signifie que vous pouvez avoir des étiquettes et une interface utilisateur en anglais (UICulture en anglais), et un formatage de la devise, de la date, de l'heure et des nombres norvégiens (culture norvégienne.) En termes Windows, pensez à l'installation d'un module linguistique pour les menus et les boîtes de dialogue (UICulture), mais fonctionnant avec des paramètres régionaux norvégiens (Culture.)
Lasse V.Karlsen
2
Pour souligner les implications de ceci: même si vous ne prenez pas en charge la langue d'un utilisateur, assurez-vous de prendre en charge sa culture, pour le formatage! J'ai vu des erreurs lorsqu'une application revient à "en-US" à la fois pour la culture et la langue, alors qu'elle n'avait besoin que de se replier sur la langue.
ToolmakerSteve
1
Quel est l'intérêt d'utiliser un CultureInfoobjet entier uniquement pour déterminer le fichier de ressources où un stringsuffirait? (Par exemple, la Languagepropriété du FrameworkElement)
Wouter
2

Culture and UICulture

Les valeurs sont des paires de chaînes de deux lettres, la première sert à définir la langue et la seconde à définir la région. Exemple:

en-GBici enreprésente Englishet GBreprésenteGreat Briton

en-USici enreprésente Englishet USreprésenteUnited States

Utilisez Culturepour les fonctions dépendant de la culture comme la date, l'heure. et UICultureest pour le chargement correct du fichier de ressources.

Arme X
la source
0

Juste une petite question à considérer en plus de l'explication géniale de @ Vache: vous pouvez définir à la fois UICulture et Culture à (niveau de la page et niveau de l'application).

Afin de les définir au niveau de l'application, ajoutez simplement une session de globalisation dans web.config

par exemple <globalization uiCulture="es" culture="es-MX" />

Et pour les définir au niveau de la page, ce qui est bon à ajouter sur une page (individuelle) spécifique, définissez les attributs Culture et UICulture dans la directive @ page

par exemple <%@ Page UICulture="es" Culture="es-MX" %>

Hooman
la source
-4

La propriété UICulture peut changer pour chaque navigateur Web, tandis que la culture reste constante.

La valeur Culture peut être définie sur des cultures spécifiques uniquement, telles que en-US ou en-GB. Cela évite de devoir identifier le bon symbole de devise à utiliser pour en, où en-US et en-GB ont des symboles de devise différents. Les utilisateurs peuvent définir la culture et la culture de l'interface utilisateur dans leurs navigateurs.

Mohammed Nazer
la source