Les cultures sont regroupées en trois ensembles: la culture invariante, les cultures neutres et les cultures spécifiques. La culture en
est une culture neutre tandis que la culture en-US
est une culture spécifique.
GetCultureInfo
GetCultureInfo
vous donne la culture que vous avez demandé, donc si vous demandez une culture neutre, vous obtenez également une culture neutre comme en
.
CreateSpecificCulture
va créer une culture spécifique d'une culture neutre, donc si vous appelez CreateSpecificCulture("en")
le CultureInfo
est retourné pour la culture en-US
. Je ne suis pas sûr de savoir comment les cultures neutres sont mappées à des cultures spécifiques, mais il doit y avoir une table dans la BCL ou Windows qui contient ces mappings et décide que c'est le en-US
et non en-GB
qui est retourné. La spécification d'une culture spécifique comme argument à CreateSpecificCulture
vous donnera ce CultureInfo
comme le fait GetCultureInfo
.
Mais il y a une caractéristique quelque peu surprenant de la culture spécifique créé:
Si l'identifiant de la culture de la culture spécifique renvoyée par cette méthode correspond à l'identificateur de la culture de la culture actuelle de Windows, cette méthode crée un CultureInfo objet qui utilise les remplacements de culture Windows. Les remplacements incluent les paramètres utilisateur pour les propriétés de l'objet DateTimeFormatInfo renvoyé par la propriété DateTimeFormat et l'objet NumberFormatInfo renvoyé par la propriété NumberFormat.
Ce que cela signifie est que si la culture spécifique retournée par CreateSpecificCulture
correspond à la culture sélectionnée par l'utilisateur dans Région et langue panneau de commande dans Windows puis toutes les personnalisations utilisateur à cette culture est inclus dans le CultureInfo
retourné. Par exemple. l'utilisateur peut changer le motif de date longue ou le séparateur décimal utilisé dans les nombres. Une autre façon de penser à cela est que lorsque CreateSpecificCulture
renvoie une culture qui correspond au nom de CurrentCulture
, elle retournera cette culture, y compris les personnalisations de l'utilisateur.Pour autant que je sache, GetCultureInfo
n'a pas cette propriété et retournera toujours un CultureInfo
non modifié
Et pour vérifier si une culture est valide, j'utiliserais GetCultureInfo
.