2009-06-12 8 views
32

Quand dois-je appeler CultureInfo? CreateSpecificCulture (Chaîne) plutôt que CultureInfo. GetCultureInfo (Chaîne). La documentation MSDN n'est pas très claire.Quand utiliser CultureInfo.GetCultureInfo (String) ou CultureInfo.CreateSpecificCulture (String)

Existe-t-il un moyen de vérifier moins cher si le nom d'une culture est valide?

Je pense que si vous passez « en » plutôt que « en-GB » à CultureInfo.CreateSpecificCulture (String), vous obtiendrez une erreur, mais que CultureInfo.GetCultureInfo (String) ne me dérange pas. Par exemple. CultureInfo.GetCultureInfo (String) peut faire face si vous ne passez qu'une langue. Cependant, je ne suis toujours pas clair sur ce point.

Répondre

10

Cela dépend un peu de ce pour quoi vous avez besoin de la culture. Les noms courts ("en", "fr", etc.) sont utilisés pour des cultures neutres, suffisantes pour la gestion de ressources spécifiques à la langue. Mais pour le formatage numérique et le formatage de date, vous avez besoin d'une culture spécifique, comme "en-GB".

Et CultureInfo.CreateSpecificCulture("en"); fonctionne bien ici. Il est particulièrement destiné à obtenir une culture spécifique pour une culture neutre.

19

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.

GetCultureInfoGetCultureInfo 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.