CultureInfo.CurrentCulture プロパティ

定義

現在のスレッドで使用するカルチャを表す CultureInfo オブジェクトを取得または設定します。

public:
 static property System::Globalization::CultureInfo ^ CurrentCulture { System::Globalization::CultureInfo ^ get(); void set(System::Globalization::CultureInfo ^ value); };
public:
 static property System::Globalization::CultureInfo ^ CurrentCulture { System::Globalization::CultureInfo ^ get(); };
public static System.Globalization.CultureInfo CurrentCulture { get; set; }
public static System.Globalization.CultureInfo CurrentCulture { get; }
member this.CurrentCulture : System.Globalization.CultureInfo with get, set
member this.CurrentCulture : System.Globalization.CultureInfo
Public Shared Property CurrentCulture As CultureInfo
Public Shared ReadOnly Property CurrentCulture As CultureInfo

プロパティ値

CultureInfo

現在のスレッドで使用するカルチャを表すオブジェクト。

例外

プロパティが null に設定されています。

次の例は、現在のスレッドの と を CurrentCulture 変更 CurrentUICulture する方法を示しています。

using namespace System;
using namespace System::Globalization;
using namespace System::Threading;

int 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 = gcnew CultureInfo("th-TH",false);
   Console::WriteLine("CurrentCulture is now {0}.", CultureInfo::CurrentCulture->Name);
   
   // Displays the name of the CurrentUICulture of the current thread.
   Console::WriteLine("CurrentUICulture is {0}.", CultureInfo::CurrentCulture->Name);
   
   // Changes the CurrentUICulture of the current thread to ja-JP.
   CultureInfo::CurrentUICulture = gcnew CultureInfo("ja-JP",false);
   Console::WriteLine("CurrentUICulture is now {0}.", CultureInfo::CurrentCulture->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.
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.
Imports System.Globalization
Imports System.Threading

Public Module Example
   Public Sub 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)
   End Sub 
End Module
' The example displays the following output:
'       CurrentCulture is en-US.
'       CurrentCulture is now th-TH.
'       CurrentUICulture is en-US.
'       CurrentUICulture is now ja-JP.

注釈

CultureInfoこのプロパティとそれに関連付けられたオブジェクトによって返されるオブジェクトによって、日付、時刻、数値、通貨値、テキストの並べ替え順序、大文字小文字の表記規則、および文字列比較の既定の書式が決まります。

現在のカルチャは、実行中のスレッドのプロパティです。 プロパティの値を取得 CultureInfo.CurrentCulture することは、 CultureInfo プロパティによって返されるオブジェクトを取得するのと同等の機能です Thread.CurrentThread.CurrentCulture

注意

.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、タスク ID、現在のカルチャを表示する 6 つのタスクを起動します。 各タスク (およびスレッド) は、呼び出し元スレッドのカルチャを継承しています。

    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 async Task 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);
                                } ));
    
          await Task.WhenAll(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
    
    Imports System.Collections.Generic
    Imports System.Globalization
    Imports System.Runtime.Versioning
    Imports System.Threading
    Imports System.Threading.Tasks
    
    <assembly:TargetFramework(".NETFramework,Version=v4.6")>
    
    Module Example
       Public Sub Main()
          Dim tasks As New List(Of 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 ctr As Integer = 0 to 5
             tasks.Add(Task.Run(Sub()
                                   Console.WriteLine("Culture of task {0} on thread {1} is {2}",
                                                     Task.CurrentId, 
                                                     Thread.CurrentThread.ManagedThreadId,
                                                     Thread.CurrentThread.CurrentCulture.Name)
                                End Sub))                     
          Next
          Task.WaitAll(tasks.ToArray())
       End Sub
    End Module
    ' 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 してください。

  • Unix に似たシステムで Windows または ICU から 関数を呼び出します。この関数は現在、カテゴリ を持つ POSIX 関数を呼び GetUserDefaultLocaleName uloc_getDefault setlocale LC_MESSAGES 出します。

システムにインストールされたカルチャまたはユーザーの優先カルチャとは異なる特定のカルチャを設定し、アプリケーションが複数のスレッドを開始する場合、スレッドが実行されているアプリケーション ドメインの プロパティにカルチャを割り当てない限り、それらのスレッドの現在のカルチャは関数によって返されるカルチャになります。 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]
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim culture As CultureInfo = CultureInfo.CurrentCulture
      Console.WriteLine("The current culture is {0} [{1}]",
                        culture.NativeName, culture.Name)
   End Sub
End Module
' The example displays output like the following:
'     The current culture is English (United States) [en-US]

プロパティから現在のスレッドのカルチャの値を取得 Thread.CurrentThread できます。

CurrentCulture プロパティを明示的に設定する

.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
Imports System.Globalization
Imports System.Threading

Public Class Info : Inherits MarshalByRefObject
   Public Sub ShowCurrentCulture()
      Console.WriteLine("Culture of {0} in application domain {1}: {2}",
                        Thread.CurrentThread.Name,
                        AppDomain.CurrentDomain.FriendlyName,
                        CultureInfo.CurrentCulture.Name)
   End Sub
End Class

Module Example
   Public Sub Main()
      Dim inf As 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.
       Dim ad As AppDomain = AppDomain.CreateDomain("Domain2")
       Dim inf2 As Info = CType(ad.CreateInstanceAndUnwrap(GetType(Info).Assembly.FullName, "Info"),
                          Info)  
       inf2.ShowCurrentCulture()                       
   End Sub
End Module
' This example displays the following output:
'       Culture of MainThread in application domain Example.exe: nl-NL
'       Culture of MainThread in application domain Domain2: nl-NL

注意

プロパティを使用してカルチャを変更 CultureInfo.CurrentCulture するには、値が SecurityPermission 設定されたアクセス許可が ControlThread 必要です。 スレッドに関連付けられているセキュリティ状態のため、スレッドの操作は危険です。 したがって、このアクセス許可は信頼できるコードにのみ付与し、必要に応じてのみ付与する必要があります。 半信頼コードでスレッド カルチャを変更することはできません。

.NET Framework 4 より、現在のスレッド カルチャを、特定のカルチャ (フランス語 (カナダ) など) または中立カルチャ (フランス語など) に明示的に変更できます。 オブジェクトがニュートラル カルチャを表す場合、 などのプロパティの値には、ニュートラル カルチャに関連付けられている特定のカルチャ CultureInfo CultureInfo Calendar CompareInfo DateTimeFormat NumberFormat 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 €
Imports System.Globalization
Imports System.Threading

Module Example
   Public Sub Main()
      Dim value As Double = 1634.92
      CultureInfo.CurrentCulture = New CultureInfo("fr-CA")
      Console.WriteLine("Current Culture: {0}", 
                        CultureInfo.CurrentCulture.Name)
      Console.WriteLine("{0:C2}", value)
      Console.WriteLine()
      
      Thread.CurrentThread.CurrentCulture = New CultureInfo("fr")
      Console.WriteLine("Current Culture: {0}", 
                        CultureInfo.CurrentCulture.Name)
      Console.WriteLine("{0:C2}", value)
   End Sub
End Module
' The example displays the following output:
'       Current Culture: fr-CA
'       1 634,92 $
'       
'       Current Culture: fr
'       1 634,92 €

次の例に示すように、 プロパティを プロパティと共に使用して、ASP.NET アプリケーションの プロパティをユーザーの優先カルチャに CultureInfo.CurrentCulture HttpRequest.UserLanguages CurrentCulture 設定できます。

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

現在のカルチャとユーザーのオーバーライド

Windowsを使用すると、ユーザーは、オブジェクトの標準プロパティ値と、そのオブジェクトに関連付けられているオブジェクトの標準プロパティ値を、コントロール パネル の [地域] および [言語オプション CultureInfo ] を使用してオーバーライドできます。 プロパティ CultureInfo によって返される オブジェクト CurrentCulture は、次の場合にこれらのユーザーオーバーライドを反映します。

  • 現在のスレッド カルチャが関数によって暗黙的に設定Windows GetUserDefaultLocaleName 場合。

  • プロパティによって定義されている現在のスレッド カルチャが現在のスレッド カルチャに対応する場合は DefaultThreadCurrentCulture Windowsカルチャに対応します。

  • 現在のスレッド カルチャが メソッドによって返されるカルチャに明示的に設定され、そのカルチャがシステム カルチャの現在のWindows CreateSpecificCulture に対応する場合。

  • 現在のスレッド カルチャがコンストラクターによってインスタンス化されたカルチャに明示的に設定され、そのカルチャがシステム カルチャの現在のWindows CultureInfo(String) に対応する場合。

場合によっては、特にサーバー アプリケーションの場合、ユーザーのオーバーライドを反映するオブジェクトに現在のカルチャを設定 CultureInfo すると、望ましくない場合があります。 代わりに、現在のスレッド カルチャを、次の方法でユーザーのオーバーライドを反映しない オブジェクト CultureInfo に設定できます。

現在のカルチャと UWP アプリ

ユニバーサル Windows プラットフォーム (UWP) アプリでは、プロパティは .NET Framework アプリと .NET Core アプリと同様に読み取り/書き込み可能です。現在のカルチャを取得および設定するために使用できます。 CurrentCulture ただし、UWP アプリでは、現在のカルチャと現在の UI カルチャは区別されません。 プロパティ CurrentCultureCurrentUICulture プロパティは、 プロパティの最初の値にWindows。ApplicationModel.Resources.Core.ResourceManager.DefaultContext.Languagesコレクション。

.NET Core .NET Frameworkでは、現在のカルチャはスレッドごとの設定であり、 プロパティは現在のスレッドのカルチャ CurrentCulture のみを反映します。 UWP アプリでは、現在のカルチャは UWP アプリにWindows。ApplicationModel.Resources.Core.ResourceManager.DefaultContext.Languagesプロパティ。これはグローバル設定です。 プロパティを CurrentCulture 設定すると、アプリ全体のカルチャが変更されます。カルチャをスレッドごとに設定することはできません。

適用対象

こちらもご覧ください