Quand utiliser CultureInfo.GetCultureInfo (String) ou CultureInfo.CreateSpecificCulture (String)

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

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

I penser si vous passez " en "plutôt que" en-GB " à CultureInfo.CreateSpecificCulture (String) vous obtiendrez une erreur, mais cette CultureInfo.GetCultureInfo (String) ne s'en soucie pas. E. g. CultureInfo.GetCultureInfo (String) peut faire face si vous passez seulement une langue. cependant, je ne suis pas encore très clair à ce sujet.

35
demandé sur Ian Ringrose 2009-06-12 17:53:38

2 réponses

cela dépend un peu de ce pour quoi vous avez besoin de la culture. Les noms abrégés ("en"," fr", etc.) sont utilisés pour les cultures neutres, ce qui est suffisant pour la gestion des ressources linguistiques. Mais pour le formatage numérique et de date, vous avez besoin d'une culture spécifique, comme "en-GB".

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

12
répondu Henk Holterman 2014-11-20 19:12:02

les Cultures sont regroupées en trois groupes: la culture invariante, les cultures neutres et les cultures spécifiques. La culture en est une culture neutre alors que la culture en-US est une culture spécifique.

GetCultureInfo vous donnera la culture que vous avez demandé donc si vous demandez une culture neutre vous obtenez aussi une culture neutre comme en.

CreateSpecificCulture va créer une culture spécifique à partir d'une culture neutre donc, si vous appelez CreateSpecificCulture("en")CultureInfo retourné est pour l' en-US la culture. Je ne suis pas sûr de la façon dont les cultures neutres sont mappées à des cultures spécifiques, mais il doit y avoir une table à l'intérieur de la BCL ou des fenêtres qui contient ces mappages et décide que c'est le en-US et non en-GB qui est retourné. Spécifier une culture spécifique comme argument pour CreateSpecificCulture vous donnera spécifique CultureInfoGetCultureInfo ne.

mais il y a une caractéristique un peu surprenante de la culture spécifique créée:

si la l'Identificateur de culture de la culture particulière retournée par cette méthode correspond à l'Identificateur de culture de la culture Windows actuelle, cette méthode crée un objet CultureInfo qui utilise la culture Windows qui l'emporte. Les dérogations comprennent les paramètres d'utilisateur pour les propriétés de L'objet DateTimeFormatInfo retourné par la propriété DateTimeFormat et L'objet NumberFormatInfo retourné par la propriété NumberFormat.

ce Que cela signifie est que, si la culture est retourné par CreateSpecificCulture correspond à la culture sélectionné par l'utilisateur dans Région et Langue panneau de contrôle dans Windows puis toute personnalisation de l'utilisateur à cette culture est inclus dans le CultureInfo retourné. Par exemple: l'utilisateur peut modifier le motif de la date longue ou le séparateur décimal utilisé dans les nombres. Une autre façon de penser, c'est que lorsque CreateSpecificCulture renvoie une culture qui correspond au nom de CurrentCulture il va en fait retourner cette culture, y compris toute personnalisation de l'utilisateur.

aussi loin que Je peux dire GetCultureInfo n'a pas cette propriété et retournera toujours un non modifié CultureInfo.

Et pour vérifier si une culture est valide je voudrais utiliser GetCultureInfo.

21
répondu Martin Liversage 2013-11-21 08:26:00