2009-06-12 3 views
32

Wann sollte ich CultureInfo aufrufen? CreateSpecificCulture (String) statt CultureInfo. GetCultureInfo (Zeichenfolge). Die MSDN-Dokumentation ist nicht sehr klar.Wann ist CultureInfo.GetCultureInfo (String) oder CultureInfo.CreateSpecificCulture (String) zu verwenden?

Gibt es auch eine Möglichkeit, billiger zu überprüfen, ob der Name einer Kultur gültig ist?

ich denke, wenn man „en“ eher dann „en-GB“ zu CultureInfo.CreateSpecificCulture (String) übergeben wird eine Fehlermeldung angezeigt, aber das CultureInfo.GetCultureInfo (String) dagegen nicht. Z.B. CultureInfo.GetCultureInfo (String) kann bewältigen, wenn Sie nur eine Sprache übergeben. Allerdings ist mir das noch unklar.

Antwort

10

Es hängt ein bisschen davon ab, wofür Sie die Kultur brauchen. Die Kurznamen ("en", "fr" usw.) werden für neutrale Kulturen verwendet, die für eine sprachspezifische Ressourcenverwaltung ausreichend sind. Für die numerische und Datumsformatierung benötigen Sie jedoch eine bestimmte Kultur, wie "en-GB".

Und CultureInfo.CreateSpecificCulture("en"); funktioniert gut hier. Es ist besonders beabsichtigt, eine spezifische Kultur für eine neutrale Kultur zu erhalten.

19

Kulturen sind in drei Gruppen unterteilt: die invariante Kultur, die neutralen Kulturen und die spezifischen Kulturen. Die Kultur en ist eine neutrale Kultur, während die Kultur en-US eine spezifische Kultur ist.

GetCultureInfo geben Ihnen die gewünschte Kultur, wenn Sie also eine neutrale Kultur beantragen, erhalten Sie auch eine neutrale Kultur wie en.

CreateSpecificCulture eine spezifische Kultur aus einer neutralen Kultur schaffen, damit, wenn Sie CreateSpecificCulture("en") rufen die CultureInfo zurückgekehrt ist für die en-US Kultur. Ich bin mir nicht sicher, wie neutrale Kulturen bestimmten Kulturen zugeordnet werden, aber es muss eine Tabelle in der BCL oder in Windows vorhanden sein, die diese Zuordnungen enthält, und entscheidet, dass die en-US und nicht en-GB zurückgegeben wird. Wenn Sie eine spezifische Kultur als Argument für CreateSpecificCulture angeben, erhalten Sie diese spezifische CultureInfo genauso wie GetCultureInfo.

Aber es ist ein etwas überraschendes Merkmal der spezifischen Kultur geschaffen:

Wenn die Kulturbezeichner der spezifischen Kultur nach dieser Methode entspricht den Kulturbezeichner der aktuellen Windows-Kultur zurückgegeben, erstellt diese Methode einen Culture Objekt, das die Windows-Kulturüberschreibungen verwendet. Zu den Überschreibungen gehören Benutzereinstellungen für die Eigenschaften des DateTimeFormatInfo-Objekts, das von der DateTimeFormat-Eigenschaft zurückgegeben wird, und des NumberFormatInfo-Objekts, das von der NumberFormat-Eigenschaft zurückgegeben wird.

Was dies bedeutet ist, dass, wenn die spezifische Kultur von CreateSpecificCulture entspricht die Kultur durch den Benutzer in Region und Sprache Systemsteuerung in Windows dann alle Benutzeranpassung zu dieser Kultur ausgewählt zurückgegeben werden, in der zurück CultureInfo enthält. Z.B. Der Benutzer kann das lange Datumsmuster oder das in Zahlen verwendete Dezimaltrennzeichen ändern. Eine andere Möglichkeit, darüber nachzudenken, ist, dass wenn CreateSpecificCulture eine Kultur zurückgibt, die dem Namen CurrentCulture entspricht, wird diese Kultur einschließlich aller Benutzeranpassungen tatsächlich zurückgegeben.

So weit ich sagen kann GetCultureInfo hat diese Eigenschaft nicht und wird immer eine unmodifizierte CultureInfo zurückgeben.

Und um zu überprüfen, ob eine Kultur gültig ist, würde ich GetCultureInfo verwenden.

Verwandte Themen