資訊
The topic you requested is included in another documentation set. For convenience, it's displayed below. Choose Switch to see the topic in its original location.

CultureInfo 類別

提供有關特定文化特性 (Culture) 的資訊 (文化特性在 Unmanaged 程式碼開發中稱為「地區設定」(Locale))。 提供的資訊包括文化特性的名稱、書寫系統、使用的曆法,以及日期和排序字串的格式。

System.Object
  System.Globalization.CultureInfo

命名空間:  System.Globalization
組件:  mscorlib (在 mscorlib.dll 中)

[SerializableAttribute]
[ComVisibleAttribute(true)]
public class CultureInfo : ICloneable, 
	IFormatProvider

CultureInfo 類型會公開下列成員。

  名稱描述
公用方法受 XNA Framework 支援CultureInfo(Int32)根據文化特性識別項所指定的文化特性,初始化 CultureInfo 類別的新執行個體。
公用方法受 XNA Framework 支援受 可攜式類別庫 支援適用於 Windows 市集應用程式的 .NET支援CultureInfo(String)根據名稱所指定的文化特性,初始化 CultureInfo 類別的新執行個體。
公用方法受 XNA Framework 支援CultureInfo(Int32, Boolean)初始化 CultureInfo 類別的新執行個體,根據文化特性識別項所指定的文化特性,並根據指定是否要使用系統中使用者選取的文化特性設定的布林值 (Boolean)。
公用方法受 XNA Framework 支援CultureInfo(String, Boolean)初始化 CultureInfo 類別的新執行個體,根據名稱所指定的文化特性,並根據指示是否要從系統中使用使用者選取的文化特性設定的布林值。
回頁首

  名稱描述
公用屬性受 XNA Framework 支援受 可攜式類別庫 支援適用於 Windows 市集應用程式的 .NET支援Calendar取得文化特性使用的預設曆法。
公用屬性受 XNA Framework 支援受 可攜式類別庫 支援適用於 Windows 市集應用程式的 .NET支援CompareInfo取得 CompareInfo,定義此文化特性如何比較字串。
公用屬性CultureTypes取得和目前 CultureInfo 物件相關的文化特性型別。
公用屬性靜態成員受 XNA Framework 支援受 可攜式類別庫 支援適用於 Windows 市集應用程式的 .NET支援CurrentCulture取得 CultureInfo 物件,表示目前執行緒使用的文化特性。
公用屬性靜態成員受 XNA Framework 支援受 可攜式類別庫 支援適用於 Windows 市集應用程式的 .NET支援CurrentUICulture取得 CultureInfo 物件,表示資源管理員用於執行階段查詢特定文化特性資源的目前使用者介面文化特性。
公用屬性受 XNA Framework 支援受 可攜式類別庫 支援適用於 Windows 市集應用程式的 .NET支援DateTimeFormat取得或設定 DateTimeFormatInfo,定義日期和時間在文化特性上適當的顯示格式。
公用屬性靜態成員適用於 Windows 市集應用程式的 .NET支援DefaultThreadCurrentCulture取得或設定目前應用程式定義域中之執行緒的預設文化特性。
公用屬性靜態成員適用於 Windows 市集應用程式的 .NET支援DefaultThreadCurrentUICulture取得或設定目前應用程式定義域中之執行緒的預設 UI 文化特性。
公用屬性受 可攜式類別庫 支援適用於 Windows 市集應用程式的 .NET支援DisplayName取得完整當地語系化文化特性名稱。
公用屬性受 XNA Framework 支援受 可攜式類別庫 支援適用於 Windows 市集應用程式的 .NET支援EnglishName取得格式為 languagefull [country/regionfull] 的英文文化特性名稱。
公用屬性IetfLanguageTag已取代。 取得語言的 RFC 4646 標準識別。
公用屬性靜態成員InstalledUICulture取得 CultureInfo,表示作業系統所安裝的文化特性。
公用屬性靜態成員受 XNA Framework 支援受 可攜式類別庫 支援適用於 Windows 市集應用程式的 .NET支援InvariantCulture取得與文化特性無關的 (不變的) CultureInfo 物件。
公用屬性受 XNA Framework 支援受 可攜式類別庫 支援適用於 Windows 市集應用程式的 .NET支援IsNeutralCulture取得值,指出目前 CultureInfo 是否表示中性文化特性。
公用屬性受 XNA Framework 支援受 可攜式類別庫 支援適用於 Windows 市集應用程式的 .NET支援IsReadOnly取得值,指出目前 CultureInfo 是否為唯讀。
公用屬性KeyboardLayoutId取得使用中的輸入地區設定識別項 (Input Locale Identifier)。
公用屬性受 XNA Framework 支援LCID取得目前 CultureInfo 的文化特性識別項。
公用屬性受 XNA Framework 支援受 可攜式類別庫 支援適用於 Windows 市集應用程式的 .NET支援Name取得 languagecode2-country/regioncode2 格式的文化特性名稱。
公用屬性受 XNA Framework 支援受 可攜式類別庫 支援適用於 Windows 市集應用程式的 .NET支援NativeName取得文化特性設定為要顯示的文化特性名稱,由語言、國家/地區和選擇性 (Optional) 指令碼組成。
公用屬性受 XNA Framework 支援受 可攜式類別庫 支援適用於 Windows 市集應用程式的 .NET支援NumberFormat取得或設定 NumberFormatInfo,定義數字、貨幣和百分比在文化特性上適當的顯示格式。
公用屬性受 XNA Framework 支援受 可攜式類別庫 支援適用於 Windows 市集應用程式的 .NET支援OptionalCalendars取得可為文化特性所使用的曆法清單。
公用屬性受 XNA Framework 支援受 可攜式類別庫 支援適用於 Windows 市集應用程式的 .NET支援Parent取得 CultureInfo,表示目前 CultureInfo 的父文化特性。
公用屬性受 XNA Framework 支援受 可攜式類別庫 支援適用於 Windows 市集應用程式的 .NET支援TextInfo取得 TextInfo,定義與文化特性相關的書寫系統。
公用屬性受 XNA Framework 支援ThreeLetterISOLanguageName取得目前 CultureInfo 的語言的 ISO 639-2 三個字母代碼。
公用屬性受 XNA Framework 支援ThreeLetterWindowsLanguageName取得該語言在 Windows API 定義中的三個字母代碼。
公用屬性受 XNA Framework 支援受 可攜式類別庫 支援適用於 Windows 市集應用程式的 .NET支援TwoLetterISOLanguageName取得目前 CultureInfo 的語言的 ISO 639-1 兩個字母代碼。
公用屬性受 XNA Framework 支援UseUserOverride取得值,指出目前 CultureInfo 是否使用使用者選取的文化特性設定。
回頁首

  名稱描述
公用方法受 XNA Framework 支援ClearCachedData重新整理已快取的文化特性相關資訊。
公用方法受 XNA Framework 支援受 可攜式類別庫 支援適用於 Windows 市集應用程式的 .NET支援Clone建立目前 CultureInfo 的複本。
公用方法靜態成員受 XNA Framework 支援CreateSpecificCulture建立 CultureInfo,表示與指定名稱相關的特定文化特性。
公用方法受 XNA Framework 支援受 可攜式類別庫 支援適用於 Windows 市集應用程式的 .NET支援Equals判斷指定物件是否與目前 CultureInfo 為相同的文化特性。 (覆寫 Object.Equals(Object)。)
受保護的方法受 XNA Framework 支援受 可攜式類別庫 支援適用於 Windows 市集應用程式的 .NET支援Finalize 允許物件在記憶體回收進行回收之前,嘗試釋放資源並執行其他清除作業。 (繼承自 Object)。
公用方法GetConsoleFallbackUICulture在預設的圖形使用者介面 (Graphic User Interface,GUI) 的文化特性不適合主控台應用程式 (Console Application) 時,取得適合的替代使用者介面文化特性。
公用方法靜態成員受 XNA Framework 支援GetCultureInfo(Int32)使用指定的文化特性識別項,擷取已快取的唯讀文化特性執行個體。
公用方法靜態成員受 XNA Framework 支援GetCultureInfo(String)使用指定的文化特性名稱,擷取已快取的唯讀文化特性執行個體。
公用方法靜態成員GetCultureInfo(String, String)擷取文化特性的快取、唯讀執行個體。 這些參數會指定文化特性,這個文化特性使用另一個文化特性所指定的 TextInfoCompareInfo 物件來初始化。
公用方法靜態成員GetCultureInfoByIetfLanguageTag已取代。 擷取唯讀的 CultureInfo 物件,其語言特性是透過指定的 RFC 4646 語言標籤所辨識。
公用方法靜態成員GetCultures取得支援的文化特性清單,此清單經過指定的 CultureTypes 參數篩選。
公用方法受 XNA Framework 支援受 可攜式類別庫 支援適用於 Windows 市集應用程式的 .NET支援GetFormat取得定義如何格式化指定型別的物件。
公用方法受 XNA Framework 支援受 可攜式類別庫 支援適用於 Windows 市集應用程式的 .NET支援GetHashCode做為目前 CultureInfo 的雜湊函式,適合於雜湊演算法和資料結構 (如雜湊表)。 (覆寫 Object.GetHashCode()。)
公用方法受 XNA Framework 支援受 可攜式類別庫 支援適用於 Windows 市集應用程式的 .NET支援GetType取得目前執行個體的 Type (繼承自 Object)。
受保護的方法受 XNA Framework 支援受 可攜式類別庫 支援適用於 Windows 市集應用程式的 .NET支援MemberwiseClone建立目前 Object 的淺層複本 (Shallow Copy)。 (繼承自 Object)。
公用方法靜態成員受 XNA Framework 支援受 可攜式類別庫 支援適用於 Windows 市集應用程式的 .NET支援ReadOnly傳回指定 CultureInfo 的唯讀包裝函式。
公用方法受 XNA Framework 支援受 可攜式類別庫 支援適用於 Windows 市集應用程式的 .NET支援ToString傳回包含目前 CultureInfo 名稱的字串,其格式為 languagecode2-country/regioncode2 (覆寫 Object.ToString()。)
回頁首

CultureInfo 類別 (Class) 會提供特定文化特性的資訊,例如相關的語言、次語言 (Sublanguage)、國家/地區、曆法和與特別文化慣例。 這個類別也提供對 DateTimeFormatInfoNumberFormatInfoCompareInfoTextInfo 的特定文化特性執行個體的存取的物件。 這些物件包含特定文化特性作業所需的資訊,例如大小寫的指定、日期和數字的格式化,以及字串的比較。 格式化,解決或操作文化特性特定資訊,例如 StringDateTimeDateTimeOffset和實值型別的類別直接或間接使用 CultureInfo 類別。

本節內容:

文化特性名稱和識別項
不變、中性和特定文化特性
自訂文化特性
動態文化特性資料
文化特性和執行緒
應用程式定義域和文化特性
CultureInfo 物件序列化
控制台覆寫
替代排序順序

文化特性名稱和識別項

CultureInfo 類別會根據 RFC 4646 指定每個文化特性的唯一名稱。 這個名稱是語言相關的 ISO 639 雙字母小寫文化特性代碼以及國家或地區相關的 ISO 3166 雙字母大寫子文化特性代碼之組合。

注意事項注意事項

當文化特性名稱傳遞至類別建構函式或方法 (例如 CreateSpecificCultureCultureInfo時,它的情況並不重要。

文化特性名稱的格式為languagecode2>-country/regioncode2;其中languagecode2是兩個字母語言代碼,而 country/regioncode2則是兩個字母子文化特性代碼。 實際範例包括 ja-JP 和 en-US,前者代表日文 (日本),後者則代表英文 (美國)。 在沒有雙字母語言代碼的情況下,將會改用衍生自 ISO 639-2 的三個字母的代碼。

請注意,某些文化特性名稱會同時指定 ISO 15924 指令碼。 例如,Cyrl 指定斯拉夫文指令碼,而 Latn 則指定拉丁文指令碼。 包含指令碼使用樣式 languagecode2的文化特性名稱-scripttag-country/regioncode2 代表烏茲別克文 (斯拉夫、烏茲別克) 的 uz-Cyrl-UZ 就是這種文化特性名稱類型的一個例子。 在 Windows Vista 以前的作業系統上,可以使用languagecode2-country/regioncode2-scripttag模式來呈現加入文字的文化特性名稱,例如 uz-UZ-Cyrl 即代表烏茲別克文 (烏茲別克,斯拉夫)。

僅使用雙字母小寫語言代碼指定的是中性文化特性。 例如,fr指定的是法文的中性文化特定,而 de是指定德文的中性文化特性。

注意事項注意事項

有兩個文化特性名稱與這項規則不符; 文化特性中文 (簡體) 和中文 (繁體) 都是中性文化特性。 文化特性名稱代表目前的標準,除非您有使用舊名稱 zh-CHS 和 zh-CHT 的理由,否則請使用這兩個名稱。

文化特性識別項是標準的國際數字縮寫,而且有唯一識別已安裝的其中一個文化特性所需的元件。 您的應用程式可以使用預先定義的文化特性識別項,或定義自訂的識別項。

System.Globalization 命名空間中的這個類別和其他類別會使用某些預先定義的文化特性名稱和識別項。 全球化開發人員中心的國家語言支援 (NLS) API 參考 (英文) 會顯示詳細的文化特性資訊。

請記住,文化特性名稱和識別項只代表可以在特定電腦上找到的文化特性子集。 Windows 版本或 Service Pack 可以變更可用的文化特性。 應用程式會使用 CultureAndRegionInfoBuilder 類別加入自訂文化特性。 使用者則可使用 Microsoft Locale Builder 工具加入他們自己的自訂文化特性。 Microsoft Locale Builder 是使用 CultureAndRegionInfoBuilder 類別以 Managed 程式碼撰寫而成。

多個不同的名稱都與某個文化特性緊密關聯,這些名稱與下列類別成員的關聯尤其明顯:

不變、中性和特定文化特性

文化特性通常可分為三組:非變異文化特性、中性文化特性和特定文化特性。

非變異文化特性不會區分文化特性。 您的應用程式依使用空字串 ("") 的名稱或依其識別項,指定不因國別而異的文化特性。 InvariantCulture 會定義不因文化特性而異的執行個體。 它會與英語相關聯,但不會與國別/區域相關聯。 它幾乎用於要求文化特性的 Globalization 命名空間中的所有方法。

中性文化特性是與語言相關聯的文化特性,但不與國別/區域相關聯。 特定文化特性是與語言和國別/區域相關聯的文化特性。 例如,fr 是法文文化特性的中性名稱, fr-FR 是特定「法文 (法國)」文化特性的名稱。 請注意,中文 (簡體) 和中文 (繁體) 也都視為中性文化特性。

不建議您針對中性文化特性建立 CompareInfo 類別的執行個體,因為它所包含的資料是任意的。 若要顯示並排序資料,請同時指定語言和地區。 此外,針對中性文化特性所建立之 CompareInfo 物件的 Name 屬性只會傳回國家但不會包含地區。

定義的文化特性具有下列階層架構:特定文化特性的父項是中性文化特性,而中性文化特性的父項則是非變異文化特性。 Parent 屬性包含與特定文化特性相關聯的中性文化特性。 自訂文化特性應該會遵照這個模式來定義 Parent 屬性。

如果作業系統中沒有特定文化特性的資源,就會使用相關的中性文化特性資源。 如果無法使用中性文化特性,就會使用主要組件中內嵌的資源。 如需資源回溯過程的詳細資訊,請參閱在桌面應用程式中封裝和部署資源 (資源的回溯過程)。

Windows API 中的地區設定清單與 .NET Framework 支援的文化特性清單稍有不同。 如果需要與 Windows 之間的互通性 (Interoperability) (例如,透過 p/invoke 機制),則應用程式應該會使用作業系統中定義的特定文化特性。 使用特定文化特性可確保能夠與對等的 Windows 地區設定一致,該地區設定是利用與 LCID 相同的地區設定識別項來識別。

DateTimeFormatInfo NumberFormatInfo 只可以為不因文化特性而異 (Invariant Culture) 或特定文化特性 (Culture) 建立,而不可為中性文化特性建立。

如果 DateTimeFormatInfo.CalendarTaiwanCalendar,但是 Thread.CurrentCulture 沒有設定為 "zh-TW",DateTimeFormatInfo.NativeCalendarNameDateTimeFormatInfo.GetEraNameDateTimeFormatInfo.GetAbbreviatedEraName 傳回空字串 ("")。

自訂文化特性

除了 Windows 作業系統和 .NET Framework 支援的預先定義文化特性之外, .NET Framework 支援自訂文化特性的三種類型:

  • 補充的文化可用視窗或 .NET Framework 的新文化特性。 例如,應用程式可以安裝代表 fj-FJ 的 CultureInfo 物件 (或 Fijan (斐濟)) 在系統的文化特性。

  • 與標準文化特性的屬性不同的替代文化特性是由 Windows 和 .NET Framework 支援。

  • 與使用者覆寫的標準文化特性。 使用者可以使用 主控台中的 區域和語言 應用程式自訂現有文化特性的屬性值。

注意事項注意事項

您可以使用 CultureAndRegionInfoBuilder 類別定義,儲存和註冊補充或取代現有的文化特性的自訂文化特性。 CultureAndRegionInfoBuilder.Save 方法會建立可用來安裝在目標電腦上的自訂文化特性的地區設定 Data Markup Language (LDML) 檔案。

因為 .NET Framework 支援自訂文化特性,當使用文化特性特定資料時,您應該考慮下列項目:

  • 自訂文化特性的值可能會超出預先定義的文化特性的範圍。 例如,某些文化特性會有異常長的月份名稱、未預期的日期或時間格式,或其他不常見的資料。

  • 當您顯示在使用者介面中的文化特性特定的資料,您應該接受使用者的自訂;例如,使用者可能想要 24 小時制或 yyyyMMdd 日期格式。

  • 請記住,自訂文化特性會覆寫預設值。 因此,請勿將文化特性資料視為穩定值。 國家名稱、數字及日期格式和拼字可能會在未來變更。 如果您要序列化文化特性的資訊,例如將傳遞的日期和時間字串的日期和時間剖析函式,您應該使用非變異文化特性或特定 自訂格式字串

動態文化特性資料

除了非變異文化特性,文化特性資料都是動態的。 這一點甚至連預先定義的文化特性也一樣。 例如,國家或地區會採用新貨幣、變更文字的拼法或變更慣用的曆法,而文化特性定義也會跟著變更,以追蹤前述變化。自訂文化特性得不經通知逕行變更,而且任何特定的文化特性都有可能遭到自訂的取代文化特性所覆寫。 另外,我們將在下面討論到,個人使用者也可以覆寫文化特性偏好設定。 應用程式一律應該在執行階段取得文化特性資料。

注意事項警告

儲存資料時,應用程式應該使用非變異文化特性、二進位格式,或與文化特性無關的特定格式。 依據目前與某特定文化特性 (非變異文化特性以外的文化特性) 相關之值所儲存的資料,可能會在該文化特性變更之後變成無法讀取,或其意義可能改變。

文化特性和執行緒

在新的應用程式執行緒啟動時,它的目前文化特性或目前 UI 文化特性定義為目前系統文化特性,並不是由目前執行緒文化特性。 下列範例說明差異。 它會將目前的文化特性以及應用程式執行緒目前的 UI 文化特性設定為法文文化特性 (fr-FR)。 如果目前的文化特性已 fr-FR,範例將它設為英文 (美國) 文化特性 (en-US)。 它還會顯示三個亂數為貨幣值並建立新的執行緒,接著,顯示三個亂數的貨幣值。 但是,在這個範例的輸出所示,新執行緒上顯示的貨幣值並不會反映法文文化特性的格式化慣例,不同於從主應用程式執行緒的輸出。


using System;
using System.Globalization;
using System.Threading;

public class Example
{
   static Random rnd = new Random();

   public static void Main()
   {
      if (Thread.CurrentThread.CurrentCulture.Name != "fr-FR") {
         // If current culture is not fr-FR, set culture to fr-FR.
         Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("fr-FR");
         Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr-FR");
      }
      else {
         // Set culture to en-US.
         Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
         Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("en-US");
      }
      ThreadProc();

      Thread worker = new Thread(ThreadProc);
      worker.Name = "WorkerThread";
      worker.Start();
   }

   private static void DisplayThreadInfo()
   {
      Console.WriteLine("\nCurrent Thread Name: '{0}'", 
                        Thread.CurrentThread.Name);
      Console.WriteLine("Current Thread Culture/UI Culture: {0}/{1}", 
                        Thread.CurrentThread.CurrentCulture.Name,
                        Thread.CurrentThread.CurrentUICulture.Name);                        
   }

   private static void DisplayValues()
   {
      // Create new thread and display three random numbers.
      Console.WriteLine("Some currency values:");
      for (int ctr = 0; ctr <= 3; ctr++)
         Console.WriteLine("   {0:C2}", rnd.NextDouble() * 10);                        
   }

   private static void ThreadProc()
   {
      DisplayThreadInfo();
      DisplayValues();
   }
}
// The example displays output similar to the following:
//       Current Thread Name: ''
//       Current Thread Culture/UI Culture: fr-FR/fr-FR
//       Some currency values:
//          8,11 €
//          1,48 €
//          8,99 €
//          9,04 €
//       
//       Current Thread Name: 'WorkerThread'
//       Current Thread Culture/UI Culture: en-US/en-US
//       Some currency values:
//          $6.72
//          $6.35
//          $2.90
//          $7.72


在 .NET Framework 4.5之前,在 .NET Framework 的版本中,最常見的方式確保主應用程式執行緒共用與其他背景工作執行緒的相同文化特性會透過應用程式的文化特性名稱或代表應用程式文化特性傳遞給 System.Threading.ParameterizedThreadStart 委派的 CultureInfo 物件。 下列範例使用這個方法會確定兩個執行緒顯示的貨幣值反映不變文化特性的格式化慣例。


using System;
using System.Globalization;
using System.Threading;

public class Example
{
   static Random rnd = new Random();

   public static void Main()
   {
      if (Thread.CurrentThread.CurrentCulture.Name != "fr-FR") {
         // If current culture is not fr-FR, set culture to fr-FR.
         Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("fr-FR");
         Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr-FR");
      }   
      else {
         // Set culture to en-US.
         Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
         Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("en-US");
      }
      DisplayThreadInfo();
      DisplayValues();

       Thread worker = new Thread(Example.ThreadProc);
       worker.Name = "WorkerThread";
       worker.Start(Thread.CurrentThread.CurrentCulture);
   }

   private static void DisplayThreadInfo()
   {
      Console.WriteLine("\nCurrent Thread Name: '{0}'", 
                        Thread.CurrentThread.Name);
      Console.WriteLine("Current Thread Culture/UI Culture: {0}/{1}", 
                        Thread.CurrentThread.CurrentCulture.Name,
                        Thread.CurrentThread.CurrentUICulture.Name);                        
   }

   private static void DisplayValues()
   {
      // Create new thread and display three random numbers.
      Console.WriteLine("Some currency values:");
      for (int ctr = 0; ctr <= 3; ctr++)
         Console.WriteLine("   {0:C2}", rnd.NextDouble() * 10);                        
   }

   private static void ThreadProc(Object obj) 
   {
      Thread.CurrentThread.CurrentCulture = (CultureInfo) obj;
      Thread.CurrentThread.CurrentUICulture = (CultureInfo) obj;
      DisplayThreadInfo();
      DisplayValues();
   }
}
// The example displays output similar to the following:
//       Current Thread Name: ''
//       Current Thread Culture/UI Culture: fr-FR/fr-FR
//       Some currency values:
//          6,83 €
//          3,47 €
//          6,07 €
//          1,70 €
//       
//       Current Thread Name: 'WorkerThread'
//       Current Thread Culture/UI Culture: fr-FR/fr-FR
//       Some currency values:
//          9,54 €
//          9,50 €
//          0,58 €
//          6,91 €


您可以設定文化特性和執行緒 UI 文化特性是藉由呼叫 ThreadPool.QueueUserWorkItem(WaitCallback, Object) 方法以類似的方式合併執行緒。

從 .NET Framework 4.5開始,您可以更直接將表示該文化特性為 DefaultThreadCurrentCultureDefaultThreadCurrentUICulture 屬性的 CultureInfo 物件設定文化特性和所有執行緒 UI 文化特性在應用程式定義域的。 下列範例會使用這些屬性來保證在預設應用程式定義域中的所有執行緒共用相同的文化特性。


using System;
using System.Globalization;
using System.Threading;

public class Example
{
   static Random rnd = new Random();

   public static void Main()
   {
      if (Thread.CurrentThread.CurrentCulture.Name != "fr-FR") {
         // If current culture is not fr-FR, set culture to fr-FR.
         CultureInfo.DefaultThreadCurrentCulture = CultureInfo.CreateSpecificCulture("fr-FR");
         CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.CreateSpecificCulture("fr-FR");
      }   
      else {
         // Set culture to en-US.
         CultureInfo.DefaultThreadCurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
         CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.CreateSpecificCulture("en-US");
      }
      ThreadProc();

      Thread worker = new Thread(Example.ThreadProc);
      worker.Name = "WorkerThread";
      worker.Start();
   }

   private static void DisplayThreadInfo()
   {
      Console.WriteLine("\nCurrent Thread Name: '{0}'", 
                        Thread.CurrentThread.Name);
      Console.WriteLine("Current Thread Culture/UI Culture: {0}/{1}", 
                        Thread.CurrentThread.CurrentCulture.Name,
                        Thread.CurrentThread.CurrentUICulture.Name);                        
   }

   private static void DisplayValues()
   {
      // Create new thread and display three random numbers.
      Console.WriteLine("Some currency values:");
      for (int ctr = 0; ctr <= 3; ctr++)
         Console.WriteLine("   {0:C2}", rnd.NextDouble() * 10);                        
   }

   private static void ThreadProc() 
   {
      DisplayThreadInfo();
      DisplayValues();
   }
}
// The example displays output similar to the following:
//       Current Thread Name: ''
//       Current Thread Culture/UI Culture: fr-FR/fr-FR
//       Some currency values:
//          6,83 €
//          3,47 €
//          6,07 €
//          1,70 €
//       
//       Current Thread Name: 'WorkerThread'
//       Current Thread Culture/UI Culture: fr-FR/fr-FR
//       Some currency values:
//          9,54 €
//          9,50 €
//          0,58 €
//          6,91 €


注意事項警告

雖然 DefaultThreadCurrentCultureDefaultThreadCurrentUICulture 屬性都是靜態成員,它們會定義預設的文化特性和預設 UI 文化特性,只有目前這些屬性值時設定的應用程式定義域的。 如需詳細資訊,請參閱下一節中, 文化特性以及應用程式定義域

當您將值指派給 DefaultThreadCurrentCultureDefaultThreadCurrentUICulture 屬性時,文化特性和執行緒的 UI 文化特性在應用程式定義域的可能變更(如果未明確指派文化特性)。 不過,在執行目前應用程式定義域時,執行這些執行緒來反映新的文化特性設定。 如果這些執行緒在另一個應用程式定義域中執行,其文化特性成為該應用程式定義域中定義的預設文化特性。 因此,我們建議您一律設定主應用程式執行緒的文化特性並不需要變更其 DefaultThreadCurrentCultureDefaultThreadCurrentUICulture 屬性。

應用程式定義域和文化特性

DefaultThreadCurrentCulture DefaultThreadCurrentUICulture 是明確定義預設只文化特性應用程式定義域的目前的靜態屬性,當屬性值設定或擷取時。 下列範例會將預設文化特性和預設 UI 文化特性在預設應用程式定義域為法文,然後使用 AppDomainSetup 類別和 AppDomainInitializer 委派設定預設文化特性和 UI 文化特性在新的應用程式定義域對於俄文 (俄羅斯)。 單一執行緒會執行在每個應用程式定義域的兩個方法。 注意執行緒的文化特性和 UI 文化特性不會明確地設定;會從預設文化特性和執行緒執行的應用程式定義域的 UI 文化特性衍生。 也請注意當方法被呼叫時DefaultThreadCurrentCultureDefaultThreadCurrentUICulture 屬性會傳回目前應用程式定義域的預設 CultureInfo 值。


using System;
using System.Globalization;
using System.Reflection;
using System.Threading;

public class Example
{
   public static void Main()
   {
      // Set the default culture and display the current date in the current application domain.
      Info info1 = new Info();
      SetAppDomainCultures("fr-FR");

      // Create a second application domain.
      AppDomainSetup setup = new AppDomainSetup();
      setup.AppDomainInitializer = SetAppDomainCultures;
      setup.AppDomainInitializerArguments = new string[] { "ru-RU" };
      AppDomain domain = AppDomain.CreateDomain("Domain2", null, setup);
      // Create an Info object in the new application domain.
      Info info2 = (Info) domain.CreateInstanceAndUnwrap(typeof(Example).Assembly.FullName, 
                                                         "Info"); 

      // Execute methods in the two application domains.
      info2.DisplayDate();
      info2.DisplayCultures();

      info1.DisplayDate();
      info1.DisplayCultures();            
   }

   public static void SetAppDomainCultures(string[] names)
   {
      SetAppDomainCultures(names[0]);
   }

   public static void SetAppDomainCultures(string name)
   {
       try {
         CultureInfo.DefaultThreadCurrentCulture = CultureInfo.CreateSpecificCulture(name);
         CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.CreateSpecificCulture(name);
      }
      // If an exception occurs, we'll just fall back to the system default.
      catch (CultureNotFoundException) {
         return;
      }   
      catch (ArgumentException) {
         return;
      } 
   }
}

public class Info : MarshalByRefObject
{
   public void DisplayDate()
   {
      Console.WriteLine("Today is {0:D}", DateTime.Now);
   }

   public void DisplayCultures()
   {
      Console.WriteLine("Application domain is {0}", AppDomain.CurrentDomain.Id);
      Console.WriteLine("Default Culture: {0}", CultureInfo.DefaultThreadCurrentCulture);
      Console.WriteLine("Default UI Culture: {0}", CultureInfo.DefaultThreadCurrentUICulture);
   }
}
// The example displays the following output:
//       Today is 14 октября 2011 г.
//       Application domain is 2
//       Default Culture: ru-RU
//       Default UI Culture: ru-RU
//       Today is vendredi 14 octobre 2011
//       Application domain is 1
//       Default Culture: fr-FR
//       Default UI Culture: fr-FR


如需文化特性和應用程式定義域的詳細資訊,請參閱應用程式定義域和執行緒

CultureInfo 物件序列化

CultureInfo 物件進行序列化時,實際儲存的資料只有 NameUseUserOverride 您只能在該 Name 具有相同意義的環境中,才能成功將該物件還原序列化。 下列三個範例說明情況並非總是如此:

  • 如果 CultureTypes 屬性值為,則為 CultureTypes.WindowsOnlyCultures,而且,如果該文化特性是在 Windows Vista 或 Windows 作業系統的較新版本中首次引入,它還原序列化在 Windows XP 中是不可能的。 同樣地,如果該文化特性是在 Windows XP Service Pack 2 中首次引入,您也無法在尚未安裝這個文化特性的 Windows XP 系統上將它還原序列化。

  • 如果 CultureTypes 值是 CultureTypes.UserCustomCulture,而且它在其上進行還原序列化的電腦並未安裝這個使用者文化特性,您就無法將它還原序列化。

  • 如果 CultureTypes值是CultureTypes.ReplacementCultures,而且它在其上進行還原序列化的電腦並沒有這個取代文化特性,它將會還原序列化為相同的名稱,但是不會還原序列化所有相同的特性。 例如,如果en-US在電腦 A 上是取代文化特性,但在電腦 B 上不是,而且參考這個文化特性的 CultureInfo 物件是在電腦 A 上完成序列化,但是在電腦 B 上還原序列化,這時便不會傳送這個文化特性的任何自訂特性。 這個文化特性會成功地還原序列化,但是會有不同的意義。

控制台覆寫

使用者可能會選擇透過 [控制台] 的 [地區及語言選項] 部分,覆寫一些與 Windows 的目前文化特定相關聯的值。 例如,使用者可能選擇以不同的格式顯示日期,或使用不同於文化特性預設值的貨幣。 一般而言,應用程式應該會使用這些使用者覆寫。

如果 UseUserOverridetrue,且指定的文化特性符合 Windows 目前的文化特性,則 CultureInfo 會使用這些覆寫,其中包括下列屬性的使用者設定:DateTimeFormat 屬性所傳回的 DateTimeFormatInfo 執行個體的屬性,以及 NumberFormat 屬性所傳回的 NumberFormatInfo 執行個體的屬性。 如果使用者設定與 CultureInfo 相關的文化特性不相容,例如,如果選取的曆法不是其中一個 OptionalCalendars,則表示方法的結果和屬性的值都是 undefined。

替代排序順序

有些文化特性支援一個以上的排序次序。 例如:

  • 西班牙文 (西班牙) 文化特性有兩個排序順序:預設國際排序次序和傳統排序順序。 當您以 es-ES 文化特性名稱具現化 CultureInfo 物件時,將使用國際排序順序。 當您以 es-ES-tradnl 文化特性名稱具現化 CultureInfo 物件時,將使用傳統排序順序。

  • zh-CN 中文 (中華人民共和國) 文化特性支援兩個排序順序: 使用拼音 (預設值) 和由筆畫數。 當您以 zh-CN 文化特性名稱具現化 CultureInfo 物件時,將使用預設的排序次序。 當您以 0x00020804 區域識別項具現化 CultureInfo 物件時,其由發音排序。

下表列出支援替代排序次序的文化特性清單,以及預設和替代排序次序的識別項。

文化特性名稱

文化特性

預設的排序名稱和識別項

替代排序名稱和識別項

es-ES

西班牙文 (西班牙)

國際:0x00000C0A

傳統:0x0000040A

zh-TW

中文 (台灣)

筆劃:0x00000404

注音符號:0x00030404

zh-CN

中文 (中華人民共和國)

發音:0x00000804

筆劃:0x00020804

zh-HK

中文 (香港特別行政區)

發音:0x00000c04

筆劃:0x00020c04

zh-SG

中文 (新加坡)

發音:0x00001004

筆劃:0x00021004

zh-MO

中文 (澳門特別行政區)

發音:0x00001404

筆劃:0x00021404

ja-JP

日文 (日本)

預設:0x00000411

Unicode:0x00010411

ko-KR

韓文 (韓國)

預設:0x00000412

韓文 Xwansung - Unicode:0x00010412

de-DE

德文 (德國)

字典:0x00000407

電話簿排序 DIN:0x00010407

hu-HU

匈牙利文 (匈牙利)

預設:0x0000040e

技術排序:0x0001040e

ka-GE

喬治亞文 (喬治亞)

傳統:0x00000437

西班牙現代排序:0x00010437

TopicLocation
HOW TO:設定 ASP.NET Web 網頁全球化的文化特性和 UI 文化特性建置 ASP .NET Web 應用程式
HOW TO:針對全球化使用 HTML 標記由右至左顯示文字建置 ASP .NET Web 應用程式
HOW TO:建立 ASP.NET Web 網頁的資源檔 (Visual Studio)在 Visual Studio 中建置 ASP .NET Web 應用程式
HOW TO:以程式設計方式擷取資源值建置 ASP .NET Web 應用程式
HOW TO:建立 ASP.NET 網站的資源檔建置 ASP .NET Web 應用程式
HOW TO:設定 ASP.NET Web 網頁全球化的文化特性和 UI 文化特性在 Visual Studio 中建立 ASP .NET Web 應用程式
HOW TO:以程式設計方式擷取資源值在 Visual Studio 中建立 ASP .NET Web 應用程式
HOW TO:建立 ASP.NET Web 網頁的資源檔 (Visual Studio)在 Visual Studio 中建立 ASP .NET Web 應用程式
HOW TO:針對全球化使用 HTML 標記由右至左顯示文字在 Visual Studio 中建立 ASP .NET Web 應用程式

下列範例示範如何建立使用國際排序之西班牙文 (西班牙) 的 CultureInfo 物件,以及另一個使用傳統排序的 CultureInfo 物件。


using System;
using System.Collections;
using System.Globalization;

public class SamplesCultureInfo
{

   public static void Main()
   {

      // Creates and initializes the CultureInfo which uses the international sort.
      CultureInfo myCIintl = new CultureInfo("es-ES", false);

      // Creates and initializes the CultureInfo which uses the traditional sort.
      CultureInfo myCItrad = new CultureInfo(0x040A, false);

      // Displays the properties of each culture.
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "PROPERTY", "INTERNATIONAL", "TRADITIONAL");
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "CompareInfo", myCIintl.CompareInfo, myCItrad.CompareInfo);
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "DisplayName", myCIintl.DisplayName, myCItrad.DisplayName);
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "EnglishName", myCIintl.EnglishName, myCItrad.EnglishName);
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "IsNeutralCulture", myCIintl.IsNeutralCulture, myCItrad.IsNeutralCulture);
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "IsReadOnly", myCIintl.IsReadOnly, myCItrad.IsReadOnly);
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "LCID", myCIintl.LCID, myCItrad.LCID);
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "Name", myCIintl.Name, myCItrad.Name);
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "NativeName", myCIintl.NativeName, myCItrad.NativeName);
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "Parent", myCIintl.Parent, myCItrad.Parent);
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "TextInfo", myCIintl.TextInfo, myCItrad.TextInfo);
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "ThreeLetterISOLanguageName", myCIintl.ThreeLetterISOLanguageName, myCItrad.ThreeLetterISOLanguageName);
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "ThreeLetterWindowsLanguageName", myCIintl.ThreeLetterWindowsLanguageName, myCItrad.ThreeLetterWindowsLanguageName);
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "TwoLetterISOLanguageName", myCIintl.TwoLetterISOLanguageName, myCItrad.TwoLetterISOLanguageName);
      Console.WriteLine();

      // Compare two strings using myCIintl.
      Console.WriteLine("Comparing \"llegar\" and \"lugar\"");
      Console.WriteLine("   With myCIintl.CompareInfo.Compare: {0}", myCIintl.CompareInfo.Compare("llegar", "lugar"));
      Console.WriteLine("   With myCItrad.CompareInfo.Compare: {0}", myCItrad.CompareInfo.Compare("llegar", "lugar"));

   }

}

/*
This code produces the following output.

PROPERTY                       INTERNATIONAL                                  TRADITIONAL              
CompareInfo                    CompareInfo - es-ES                            CompareInfo - es-ES_tradnl
DisplayName                    Spanish (Spain)                                Spanish (Spain)          
EnglishName                    Spanish (Spain, International Sort)            Spanish (Spain, Traditional Sort)
IsNeutralCulture               False                                          False                    
IsReadOnly                     False                                          False                    
LCID                           3082                                           1034                     
Name                           es-ES                                          es-ES                    
NativeName                     Español (España, alfabetización internacional) Español (España, alfabetización tradicional)
Parent                         es                                             es                       
TextInfo                       TextInfo - es-ES                               TextInfo - es-ES_tradnl  
ThreeLetterISOLanguageName     spa                                            spa                      
ThreeLetterWindowsLanguageName ESN                                            ESP                      
TwoLetterISOLanguageName       es                                             es                       

Comparing "llegar" and "lugar"
   With myCIintl.CompareInfo.Compare: -1
   With myCItrad.CompareInfo.Compare: 1

*/


.NET Framework

支援版本:4.5.2、4.5.1、4.5、4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

支援版本:4、3.5 SP1

可攜式類別庫

支援版本:可攜式類別庫

適用於 Windows 市集應用程式的 .NET

支援版本:Windows 8

適用於 Windows Phone 應用程式的 .NET

支援版本:Windows Phone 8、Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (不支援伺服器核心角色), Windows Server 2008 R2 (SP1 (含) 以後版本支援伺服器核心角色,不支援 Itanium)

.NET Framework 並不支援各種平台的所有版本。如需支援版本的清單,請參閱.NET Framework 系統需求

這個類型的任何 Public static (在 Visual Basic 中為 Shared) 成員都是安全執行緒。不保證任何執行個體成員是安全執行緒。

社群新增項目

顯示:
© 2014 Microsoft