本文為機器翻譯文章。如需檢視英文版,請選取 [原文] 核取方塊。您也可以將滑鼠指標移到文字上,即可在快顯視窗顯示英文原文。
譯文
原文

CultureInfo.CurrentCulture 屬性

 

取得或設定 CultureInfo 物件,這個物件代表目前執行緒使用的文化特性。

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

public static CultureInfo CurrentCulture { get; set; }

屬性值

Type: System.Globalization.CultureInfo

物件,代表目前執行緒使用的文化特性。

Exception Condition
ArgumentNullException

該屬性設定為 null

CultureInfo這個屬性所傳回的物件和其相關聯的物件決定預設格式的日期、 時間、 數字、 貨幣值,排序順序的文字、 大小寫慣例,以及字串比較。

目前的文化特性是執行的執行緒,這所傳回的靜態屬性Thread.CurrentThread屬性。CultureInfo.CurrentCulture屬性會對應至值Thread.CurrentCulture屬性。 擷取的值CultureInfo.CurrentCulture屬性就相當於擷取CultureInfo所傳回物件Thread.CurrentThread.CurrentCulture屬性。 從開始.NET Framework 4.6,設定的值CultureInfo.CurrentCulture屬性也會變更目前執行緒文化特性。

System_CAPS_note注意

在.NET Framework 4.5.2 及更新版本、CurrentCulture屬性是唯讀的。 也就是您可以擷取屬性值,但您無法設定它。 若要變更目前的文化特性,您指派CultureInfo物件,表示新的文化特性Thread.CurrentThread.CurrentCulture屬性。 從開始.NET Framework 4.6、CurrentCulture屬性是讀寫,則您可以同時設定及擷取屬性的值。 如果您設定屬性值CultureInfo物件,表示新的文化特性的值Thread.CurrentThread.CurrentCulture屬性也會變更。

本節內容:

如何判斷執行緒的文化特性
取得目前的文化特性
明確設定 CurrentCulture 屬性
目前的文化特性和使用者覆寫
文化特性和 Windows 應用程式

在執行緒啟動時,其文化特性是一開始決定,如下所示︰

  • 藉由擷取所指定的文化特性DefaultThreadCurrentCulture屬性中的執行緒正在執行,如果屬性值不是應用程式定義域中null

  • 如果執行緒正在執行的工作為基礎的非同步作業和應用程式的目標在執行緒集區執行緒.NET Framework 4.6或更新版本的.NET Framework 中,其文化特性由呼叫執行緒的文化特性。 下列範例將目前的文化特性變更為葡萄牙文 (巴西),並啟動六個工作,其中每個顯示其執行緒 ID、 其工作識別碼,以及其目前的文化特性。 每個工作 (和執行緒) 已繼承呼叫執行緒的文化特性。

    using System;
    using System.Collections.Generic;
    using System.Globalization;
    using System.Runtime.Versioning;
    using System.Threading;
    using System.Threading.Tasks;
    
    [assembly:TargetFramework(".NETFramework,Version=v4.6")]
    
    public class Example
    {
       public static void Main()
       {
          var tasks = new List<Task>();
          Console.WriteLine("The current culture is {0}", 
                            Thread.CurrentThread.CurrentCulture.Name);
          Thread.CurrentThread.CurrentCulture = new CultureInfo("pt-BR");
          // Change the current culture to Portuguese (Brazil).
          Console.WriteLine("Current culture changed to {0}",
                            Thread.CurrentThread.CurrentCulture.Name);
          Console.WriteLine("Application thread is thread {0}",
                            Thread.CurrentThread.ManagedThreadId);
          // Launch six tasks and display their current culture.
          for (int ctr = 0; ctr <= 5; ctr++)
             tasks.Add(Task.Run( () => {
                                   Console.WriteLine("Culture of task {0} on thread {1} is {2}",
                                                     Task.CurrentId, 
                                                     Thread.CurrentThread.ManagedThreadId,
                                                     Thread.CurrentThread.CurrentCulture.Name);
                                } ));                     
    
          Task.WaitAll(tasks.ToArray());
       }
    }
    // The example displays output like the following:
    //     The current culture is en-US
    //     Current culture changed to pt-BR
    //     Application thread is thread 9
    //     Culture of task 2 on thread 11 is pt-BR
    //     Culture of task 1 on thread 10 is pt-BR
    //     Culture of task 3 on thread 11 is pt-BR
    //     Culture of task 5 on thread 11 is pt-BR
    //     Culture of task 6 on thread 11 is pt-BR
    //     Culture of task 4 on thread 10 is pt-BR
    

    如需詳細資訊,請參閱中的 < 文化特性和以工作為基礎的非同步作業 」 一節CultureInfo主題。

  • 藉由呼叫 WindowsGetUserDefaultLocaleName函式。

請注意,是否您設定不同的系統安裝的文化特性或使用者的慣用文化特性特定文化特性,且應用程式啟動多個執行緒,這些執行緒的目前文化特性,將會所傳回的文化特性GetUserDefaultLocaleName函式,除非您指定的文化特性DefaultThreadCurrentCulture執行緒正在執行的應用程式定義域中的屬性。

如需有關如何判斷執行緒的文化特性的詳細資訊,請參閱中的 < 文化特性和執行緒 > 一節CultureInfo參考頁面。

CultureInfo.CurrentCulture 屬性是每個執行緒設定; 也就是每個執行緒可以有它自己的文化特性。 您所擷取的值取得目前執行緒的文化特性CultureInfo.CurrentCulture屬性,如下列範例說明。

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo culture = CultureInfo.CurrentCulture;
      Console.WriteLine("The current culture is {0} [{1}]",
                        culture.NativeName, culture.Name);
   }
}
// The example displays output like the following:
//       The current culture is English (United States) [en-US]

您也可以擷取從目前執行緒的文化特性值Thread.CurrentThread屬性。

從.NET Framework 4.6,來變更現有的執行緒,使用的文化特性設定CultureInfo.CurrentCulture新的文化特性的屬性。 如果您明確地變更執行緒的文化特性變更如此一來,如果執行緒跨越應用程式定義域界限會保存。 下列範例會變更目前執行緒文化特性為荷蘭文 (荷蘭)。 它也會顯示,當目前的執行緒跨越應用程式定義域界限,其目前的文化特性會維持已變更。

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

public class Info : MarshalByRefObject
{
   public void ShowCurrentCulture()
   {
      Console.WriteLine("Culture of {0} in application domain {1}: {2}",
                        Thread.CurrentThread.Name,
                        AppDomain.CurrentDomain.FriendlyName,
                        CultureInfo.CurrentCulture.Name);
   }
}

public class Example
{
   public static void Main()
   {
      Info inf = new Info();
      // Set the current culture to Dutch (Netherlands).
      Thread.CurrentThread.Name = "MainThread";
      CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("nl-NL");
      inf.ShowCurrentCulture();

      // Create a new application domain.
       AppDomain ad = AppDomain.CreateDomain("Domain2");
       Info inf2 = (Info) ad.CreateInstanceAndUnwrap(typeof(Info).Assembly.FullName, "Info");
       inf2.ShowCurrentCulture();                       
   }
}
// The example displays the following output:
//       Culture of MainThread in application domain ChangeCulture1.exe: nl-NL
//       Culture of MainThread in application domain Domain2: nl-NL
System_CAPS_note注意

變更文化特性使用CultureInfo.CurrentCulture屬性需要SecurityPermission具有權限ControlThread值的設定。 操作執行緒有危險,因為與執行緒相關聯的安全性狀態。 因此,此權限應該授與然後必要時,才給可靠的程式碼。 您無法變更非完全信任的程式碼中的執行緒文化特性。

從開始.NET Framework 4,您可以明確地變更目前執行緒文化特性 (例如,法文 (加拿大)) 的特定文化特性或中性文化特性 (例如,法文)。CultureInfo物件都代表中性文化特性的值CultureInfo屬性,例如CalendarCompareInfoDateTimeFormatNumberFormat,和TextInfo反映中性文化特性相關聯的特定文化特性。 例如,英文的中性文化特性的基準文化特性是英文 (美國);主控項的文化特性,德文文化特性是德文 (德國)。 下列範例說明格式化當目前的文化特性設定為特定的文化特性、 法文 (加拿大) 和中性文化特性,差異法文。

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

public class Example
{
   public static void Main()
   {
      double value = 1634.92;
      CultureInfo.CurrentCulture = new CultureInfo("fr-CA");
      Console.WriteLine("Current Culture: {0}", 
                        CultureInfo.CurrentCulture.Name);
      Console.WriteLine("{0:C2}\n", value);

      Thread.CurrentThread.CurrentCulture = new CultureInfo("fr");
      Console.WriteLine("Current Culture: {0}", 
                        CultureInfo.CurrentCulture.Name);
      Console.WriteLine("{0:C2}", value);
   }
}
// The example displays the following output:
//       Current Culture: fr-CA
//       1 634,92 $
//       
//       Current Culture: fr
//       1 634,92 €

您也可以使用CultureInfo.CurrentCulture屬性連同HttpRequest.UserLanguages屬性來設定CurrentCulture屬性的 ASP.NET 應用程式給使用者的慣用文化特性,如下列範例所示。

CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.UserLanguages[0]);

Windows 允許使用者覆寫的標準屬性值CultureInfo物件和其相關聯的物件,使用地區及語言選項控制台 中。 CultureInfo所傳回物件CurrentCulture屬性會反映這些使用者覆寫在下列情況︰

  • 如果目前執行緒文化特性隱含謔 Windows 廑飶GetUserDefaultLocaleName函式。

  • 如果目前執行緒文化特性所定義DefaultThreadCurrentCulture屬性會對應至目前的 Windows 系統文化特性。

  • 如果目前執行緒文化特性設定明確地為所傳回的文化特性CreateSpecificCulture方法和文化特性與目前的 Windows 系統文化特性。

  • 如果目前執行緒文化特性設明確具現化的文化特性CultureInfo(String)建構函式,和文化特性與目前的 Windows 系統文化特性。

在某些情況下,特別是針對伺服器應用程式,將目前的文化特性設定為CultureInfo反映使用者覆寫的物件可能會讓人困擾。 相反地,您可以將目前執行緒文化特性設定為CultureInfo並不會反映使用者的物件會覆寫以下列方式︰

在 Windows 應用程式,CurrentCulture屬性是唯讀的。 您可以使用 Windows 來設定目前的文化特性ResourceContext.Languages屬性。 下列範例會使用它來變更應用程式的目前文化特性是英文 (美國) 或目前的文化特性已為法文 (法國) 的英文 (美國)。CurrentCultureCurrentUICulture屬性接著會顯示到TextBlock控制項,名為block 範例輸出所示,目前的文化特性變更時ResourceContext.Languages屬性變更。


ResourceContext context = ResourceManager.Current.DefaultContext;
var list = new List<String>();
if (CultureInfo.CurrentCulture.Name == "en-US")
   list.Add("fr-FR");
else
   list.Add("en-US");

context.Languages = list;
block.Text += String.Format("\nThe current culture is {0}\n",
                            CultureInfo.CurrentCulture);
block.Text += String.Format("The current culture UI is {0}\n",
                            CultureInfo.CurrentUICulture);
// The example displays output like the following if run on a system
// whose current culture is English (United States):
// The current culture is fr-FR
// The current UI culture is fr-FR   


Dim context As ResourceContext = ResourceManager.Current.DefaultContext
Dim list As New List(Of String)()
If CultureInfo.CurrentCulture.Name = "en-US" Then
   list.Add("fr-FR")
Else
   list.Add("en-US")
End If
context.Languages = list
block.Text += String.Format("{1}The current culture is {0}{1}",
                            CultureInfo.CurrentCulture, vbCrLf)
block.Text += String.Format("The current culture UI is {0}\n",
                            CultureInfo.CurrentUICulture)
' The example displays output Like the following if run on a system
' whose current culture Is English (United States):
'    The current culture Is fr-FR
'    The current UI culture Is fr-FR   

下列程式碼範例示範如何變更CurrentCultureCurrentUICulture目前執行緒。

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

public class Example
{
   public static void Main()  
   {
      // Display the name of the current thread culture.
      Console.WriteLine("CurrentCulture is {0}.", CultureInfo.CurrentCulture.Name);

      // Change the current culture to th-TH.
      CultureInfo.CurrentCulture = new CultureInfo("th-TH", false);
      Console.WriteLine("CurrentCulture is now {0}.", CultureInfo.CurrentCulture.Name);

      // Display the name of the current UI culture.
      Console.WriteLine("CurrentUICulture is {0}.", CultureInfo.CurrentUICulture.Name);

      // Change the current UI culture to ja-JP.
      CultureInfo.CurrentUICulture = new CultureInfo( "ja-JP", false );
      Console.WriteLine("CurrentUICulture is now {0}.", CultureInfo.CurrentUICulture.Name);
   }
}
// The example displays the following output:
//       CurrentCulture is en-US.
//       CurrentCulture is now th-TH.
//       CurrentUICulture is en-US.
//       CurrentUICulture is now ja-JP.

SecurityPermission

for setting the current culture. Associated enumeration: F:System.Security.Permissions.SecurityPermissionFlag.ControlThread

通用 Windows 平台
自 8 起供應
.NET Framework
自 1.1 起供應
可攜式類別庫
提供支援︰ 可攜式 .NET 平台
Silverlight
自 2.0 起供應
Windows Phone Silverlight
自 7.0 起供應
Windows Phone
自 8.1 起供應
回到頁首
顯示: