2012-09-27 42 views
21

C#系統/全球化命名空間中是否有一組常量或枚舉,其中包含有效的區域名稱?CultureInfo名稱的常量

我在尋找的東西,這樣我就不必輸入「EN-GB」等

+0

http://msdn.microsoft.com/en-us/goglobal/bb896001.aspx –

回答

9

不,沒有。可用的文化列表是系統特定的 - 您甚至可以使用CultureAndRegionInfoBuilder註冊新的自定義文化。

所以如果你想這樣做,你必須爲你感興趣的常見文化的子集創建自己的枚舉或常量,例如,:

public static class KnownCulture 
{ 
    public readonly String EnglishUS = "en-US"; 
    public readonly String EnglishGB = "en-GB"; 
    ... etc ... 
} 

public enum KnownLCID 
{ 
    EnglishUS = 0x409, 
    EnglishGB = 0x809, 
    ... 
} 

這是類似於KnownColor枚舉:這是不可能創造所有可能的顏色是一種枚舉,但它可以是有意義的有常用的選項枚舉。

我不希望微軟提供等效KnownCulture枚舉開箱即用,因爲它是相當敏感的(爲什麼不包括我的文化?)。

+1

「我不希望微軟開箱即用地提供一個等效的KnownCulture枚舉」,還有iso標準,其中的java區域設置如下... – NimChimpsky

22

是的,有,GetCultures

System.Globalization.CultureInfo.GetCultures(System.Globalization.CultureTypes.SpecificCultures) 

返回數組CultureInfo對象,所以如果你想要的字符串名稱,你可以使用類似:

IEnumerable<CultureInfo> cultures = CultureInfo.GetCultures(CultureTypes.SpecificCultures); 
string[] names = cultures.Select(c => c.Name).ToArray(); 

注意「文化類型」枚舉(從MSDN鏈接)。我想最有用的將是中立文化特定文化

  • NeutralCultures是與語言相關的,但不是具體到一個國家/地區的文化。 .NET Framework文化的名稱由ISO 639-1派生的小寫雙字母代碼組成。例如:「en」(英語)是一種中性文化。 自定義文化可以有任何用戶指定的名稱,而不只是一個雙字母代碼。 不變文化包含在由指定此值的CultureInfo.GetCultures方法返回的文化數組中。
  • 特定文化特定於某個國家/地區的文化。這些文化的名稱遵循RFC 4646(Windows Vista和更高版本)。格式爲「 - 」,其中是從ISO 639-1派生的小寫雙字母代碼,是從ISO 3166派生的大寫雙字母代碼。例如,英語(美國)的「en-US」是特定文化。 自定義文化可以具有任何用戶指定的名稱,而不僅僅是符合標準的名稱。
  • InstalledWin32Colures安裝在Windows操作系統中的所有文化。請注意,並非所有.NET Framework支持的文化都安裝在操作系統中。
  • AllCultures .NET框架附帶的所有文化,包括中性和特定文化,安裝在Windows操作系統中的文化,以及用戶創建的自定義文化。
  • UserCustomCulture由用戶創建的自定義文化。
  • ReplacementCulture由用戶創建的自定義文化,用於替換.NET Framework附帶的文化。