2009-06-12 22 views
32

Quando dovrei chiamare CultureInfo. CreateSpecificCulture (String) piuttosto che CultureInfo. GetCultureInfo (stringa). La documentazione MSDN non è molto chiara.Quando utilizzare CultureInfo.GetCultureInfo (String) o CultureInfo.CreateSpecificCulture (String)

Esiste anche un modo per controllare meno se il nome di una cultura è valido?

Io penso se si passa “en” piuttosto che “it-IT” per CultureInfo.CreateSpecificCulture (String) si otterrà un errore, ma che CultureInfo.GetCultureInfo (String) non mente. Per esempio. CultureInfo.GetCultureInfo (String) può farcela se passi solo una lingua. Tuttavia, non sono ancora chiaro su questo.

risposta

10

Dipende un po 'da quello che ti serve per la cultura. I nomi brevi ("en", "fr" ecc.) Vengono utilizzati per le culture neutre, sufficienti per la gestione delle risorse specifiche della lingua. Ma per la formattazione numerica e della data hai bisogno di una cultura specifica, come "en-GB".

E CultureInfo.CreateSpecificCulture("en"); funziona bene qui. In particolare è inteso per ottenere una cultura specifica per uno neutro.

19

Le culture sono raggruppate in tre gruppi: la cultura invariante, le culture neutrali e le culture specifiche. La coltura en è una coltura neutra mentre la coltura en-US è una cultura specifica.

GetCultureInfo ti darà la cultura che hai richiesto, quindi se richiedi una cultura neutra ottieni anche una cultura neutra come en.

CreateSpecificCulture creerà una cultura specifica da una cultura neutra, quindi se si chiama il CreateSpecificCulture("en")CultureInfo restituito viene per la cultura en-US. Non sono sicuro di come le culture neutre siano mappate a culture specifiche ma ci deve essere una tabella all'interno del BCL o di Windows che contenga tali mappature e decide che è lo en-US e non lo en-GB che viene restituito. La specifica di una cultura specifica come argomento a CreateSpecificCulture ti darà quella specifica CultureInfo proprio come fa GetCultureInfo.

Ma c'è una caratteristica un po 'sorprendente della cultura specifica creata:

Se l'identificativo della cultura della cultura specifica restituito da questo metodo corrisponde l'identificatore cultura della cultura corrente di Windows, questo metodo crea un CultureInfo oggetto che utilizza le sovrascritture della cultura di Windows. Le sostituzioni includono le impostazioni utente per le proprietà dell'oggetto DateTimeFormatInfo restituite dalla proprietà DateTimeFormat e dall'oggetto NumberFormatInfo restituito dalla proprietà NumberFormat.

Ciò significa che se la cultura specifica restituito dal CreateSpecificCulture corrisponde alla cultura selezionata dall'utente in Regione e pannello di controllo Lingua in Windows, allora tutte le personalizzazioni utente a che la cultura è incluso nel CultureInfo restituito. Per esempio. l'utente può modificare il modello di data lunga o il separatore decimale utilizzato nei numeri. Un altro modo di pensare a questo è che quando CreateSpecificCulture restituisce una cultura che corrisponde al nome di CurrentCulture, restituirà effettivamente questa cultura comprese eventuali personalizzazioni dell'utente.

Per quanto posso dire, GetCultureInfo non ha questa proprietà e restituirà sempre un CultureInfo non modificato.

E per verificare se una cultura è valida vorrei usare GetCultureInfo.

Problemi correlati