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 に設定されています。

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

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 Example0
{
   public static void Main()
   {
      // Display the name of the current 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 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 表すオブジェクトに設定すると、プロパティの Thread.CurrentThread.CurrentCulture 値も変更されます。 ただし、常にプロパティを使用して、現在の CultureInfo.CurrentCulture カルチャを取得して設定することをお勧めします。

このプロパティが返すオブジェクトは CultureInfo 読み取り専用です。 つまり、既存のオブジェクトを変更 DateTimeFormatすることはできません。たとえば、. 日時形式またはその他の現在のカルチャの一部を変更するには、新しい CultureInfo オブジェクトを作成してプロパティに割り当てます。

注意

.NET Framework 4.5.2 以前のバージョンでは、CultureInfo.CurrentCultureプロパティは読み取り専用です。つまり、プロパティ値を取得することはできますが、設定することはできません。

このセクションの内容:

スレッドのカルチャの決定方法
現在のカルチャを取得する
CurrentCulture プロパティを明示的に設定する
ユーザーのオーバーライド
カルチャとWindows アプリ

スレッドのカルチャの決定方法

スレッドが開始されると、そのカルチャは最初に次のように決定されます。

  • プロパティ値が指定されていないnull場合は、スレッドが実行されているアプリケーション ドメイン内のプロパティによって指定されたDefaultThreadCurrentCultureカルチャを取得します。

  • スレッドがタスク ベースの非同期操作を実行しているスレッド プール スレッドであり、アプリが.NET Frameworkの.NET Framework 4.6 以降のバージョンを対象とする場合、そのカルチャは呼び出し元スレッドのカルチャによって決定されます。 次の例では、現在のカルチャをポルトガル語 (ブラジル) に変更し、それぞれスレッド ID、タスク ID、および現在のカルチャを表示する 6 つのタスクを起動します。 各タスク (およびスレッド) は、呼び出し元スレッドのカルチャを継承しています。

    using System;
    using System.Collections.Generic;
    using System.Globalization;
    using System.Runtime.Versioning;
    using System.Threading;
    using System.Threading.Tasks;
    
    public class Example14
    {
        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 参照してください。

  • Windowsで関数を呼び出GetUserDefaultLocaleNameすか、現在uloc_getDefaultカテゴリを持つ LC_MESSAGESPOSIX setlocale 関数を呼び出している ICU から Unix に似たシステムで関数を呼び出します。

システムにインストールされているカルチャやユーザーの優先カルチャとは異なる特定のカルチャを設定し、アプリケーションが複数のスレッドを開始する場合、スレッドが実行されているアプリケーション ドメインのプロパティにカルチャを割り当てない限り、これらのスレッドの現在のカルチャは関数によって GetUserDefaultLocaleName 返されるカルチャ DefaultThreadCurrentCulture になります。

スレッドのカルチャの決定方法の詳細については、参照ページの「カルチャとスレッド」セクションを CultureInfo 参照してください。

現在のカルチャを取得する

このプロパティは CultureInfo.CurrentCulture スレッドごとの設定です。つまり、各スレッドは独自のカルチャを持つことができます。 次の例に示すように、プロパティの値を取得することで、現在のスレッドの CultureInfo.CurrentCulture カルチャを取得します。

using System;
using System.Globalization;

public class Example5
{
   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]

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

既存のスレッドによって使用されるカルチャを変更するには、プロパティを CultureInfo.CurrentCulture 新しいカルチャに設定します。 この方法でスレッドのカルチャを明示的に変更した場合、スレッドがアプリケーション ドメインの境界を越えた場合、その変更は保持されます。 次の例では、現在のスレッド カルチャをオランダ語 (オランダ) に変更します。 また、現在のスレッドがアプリケーション ドメインの境界を越えると、現在のカルチャが変更されたままであることを示します。

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

public class Info11 : 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 Example11
{
   public static void Main()
   {
      Info11 inf = new Info11();
      // 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");
       Info11 inf2 = (Info11) ad.CreateInstanceAndUnwrap(typeof(Info11).Assembly.FullName, "Info11");
       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値が設定されたアクセス許可がControlThread必要ですSecurityPermission。 スレッドの操作は、スレッドに関連付けられているセキュリティ状態のために危険です。 したがって、このアクセス許可は信頼できるコードにのみ与え、必要に応じてのみ付与する必要があります。 半信頼コードでスレッド カルチャを変更することはできません。

.NET Framework 4 以降では、現在のスレッド カルチャを、特定のカルチャ (フランス語 (カナダ) など) またはニュートラル カルチャ (フランス語など) に明示的に変更できます。 オブジェクトがCultureInfoニュートラル カルチャを表す場合は、プロパティCalendarCultureInfo値 (,CompareInfo, , DateTimeFormatNumberFormatなど) と、ニュートラル カルチャにTextInfo関連付けられている特定のカルチャが反映されます。 たとえば、英語中立文化の主要な文化は英語 (米国) です。ドイツ文化の主要な文化はドイツ語 (ドイツ) です。 次の例は、現在のカルチャが特定のカルチャ、フランス語 (カナダ)、ニュートラル カルチャ (フランス語) に設定されている場合の書式設定の違いを示しています。

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

public class Example12
{
   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 €

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

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

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

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

  • 現在のスレッド カルチャがWindowsGetUserDefaultLocaleName関数によって暗黙的に設定されている場合。

  • プロパティで定義されている現在のスレッド カルチャが現在のDefaultThreadCurrentCultureWindows システム カルチャに対応する場合。

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

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

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

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

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

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

適用対象

こちらもご覧ください