Généralités
Liste des cultures disponibles
Invariant, neutral, specific culture
Culture
|
Description
|
invariant |
culture english sans pays/region.
|
neutral |
langue mais sans pays/region.
|
specific |
langue associée avec un pays/region. La propriété Parent d'une culture specific donne la culture neutral.
|
Obtenir une culture prédéfinie
|
// permet d'obtenir une instance mise en cache et en lecture seule de la culture en-US
// sans les modifications de l'utilisateur courant
CultureInfo enUsCulturePure = CultureInfo.GetCultureInfo("en-US");
CultureInfo enUsCulture = CultureInfo.CreateSpecificCulture("en-US");
// appelle le constructeur new CultureInfo("en-US");
// en cas d'échec appelle le constructeur new CultureInfo("en");
CultureInfo.InvariantCulture;
CultureInfo enCulture = new CultureInfo("en"); // culture neutral en
CultureInfo enUsCulture = new CultureInfo("en-US"); // culture specific en US
// permet d'obtenir la culture en-US sans les modifications de l'utilisateur courant
CultureInfo enUsCulturePure = new CultureInfo("en-US", false);
|
Obtenir la culture courante
|
CultureInfo ci = Thread.CurrentThread.CurrentCulture;
// raccourci, en lecture seule
CultureInfo.CurrentCulture
// raccourci pour les WinForm
Application.CurrentCulture
|
Obtenir la culture depuis le code 3 caractères
|
var cultureInfo = CultureInfo.GetCultures(CultureTypes.NeutralCultures).
FirstOrDefault(ci => ci.ThreeLetterISOLanguageName.Equals("ENG", StringComparison.OrdinalIgnoreCase));
|
Changer le séparateur de décimal pour l'application courante
|
// on récupère la culture courante
var currentCulture = Thread.CurrentThread.CurrentCulture;
// comme elle est en lecture seule, on la copie
var dotCulture = (CultureInfo)currentCulture.Clone();
// on peut donc modifier la copie
dotCulture.NumberFormat.NumberDecimalSeparator = ".";
// et on écrase la culture courante par notre nouvelle culture
Thread.CurrentThread.CurrentCulture = dotCulture;
|
Nombres négatifs entre parenthèses
|
var cultureUS = new CultureInfo("en-US", false);
cultureUS.NumberFormat.NumberNegativePattern = 0; // remplace le - par ()
double d = -12.3;
d.ToString("N", cultureUS); // (12.30)
d.ToString(cultureUS); // -12.3
|
|
Ne fonctionne qu'avec les formats N, N0, N1, ...
Et force le nombre de chiffres après la virgule. |
Autre solution qui permet de n'afficher que les nombres significatifs après la virgule:
|
double d = -12.3;
d.ToString("0.##;(0.##)", new CultureInfo("fr-FR", false))); // (12,3)
|
Séparateur de groupe
|
double d = 1234.56;
CultureInfo CultureUS = new CultureInfo("en-US", false);
string s1 = d.ToString("N", CultureUS); // 1,234.56
CultureUS.NumberFormat.NumberGroupSeparator = "'"; // remplace le séparateur de groupe (espace en FR, virgule en US) par '
string s2 = d.ToString("N", CultureUS); // 1'234.6
|
Exemple
|
var cultureFR = new System.Globalization.CultureInfo("fr-FR", false);
CultureInfo cultureCourante = CultureInfo.CurrentCulture;
string séparateurDecimal = cultureFR.NumberFormat.NumberDecimalSeparator; // ,
int nbChiffresApresVirgule = 2;
string zeros = new string('0', nbChiffresApresVirgule); // 00
String.Format("0{0}{1}", séparateurDecimal , zeros); // 0,00
|
|
Le constructeur CultureInfo(string culture) appelle le constructeur CultureInfo(culture, true).
Si le second paramètre bool est à true et que la culture spécifiée correspond à celle de l'utilisateur local, alors les modifications de culture de l'utilisateur sont prises en compte.
Sinon c'est la culture spécifiée et non modifiée qui est utilisée. |