Quelqu'un pourrait-il me donner un peu plus d'informations sur la différence entre Culture
et UICulture
dans le framework .NET? Que font-ils et quand utiliser quoi?
126
Culture
affecte 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
UICulture
affecte 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 UICulture
la culture allemande et afficher le formatage allemand (sans aucun impact sur les ressources chargées) que vous définiriez Culture
.
CultureInfo
objet entier uniquement pour déterminer le fichier de ressources où unstring
suffirait? (Par exemple, laLanguage
propriété duFrameworkElement
)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-GB
icien
représenteEnglish
etGB
représenteGreat Briton
en-US
icien
représenteEnglish
etUS
représenteUnited States
Utilisez
Culture
pour les fonctions dépendant de la culture comme la date, l'heure. etUICulture
est pour le chargement correct du fichier de ressources.la source
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" %>
la source
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.
la source