CultureInfo.CurrentUICulture プロパティ

定義

実行時にカルチャ固有のリソースを参照するためにリソース マネージャーによって使用される現在のユーザー インターフェイスのカルチャを表す CultureInfo オブジェクトを取得または設定します。

public:
 static property System::Globalization::CultureInfo ^ CurrentUICulture { System::Globalization::CultureInfo ^ get(); void set(System::Globalization::CultureInfo ^ value); };
public:
 static property System::Globalization::CultureInfo ^ CurrentUICulture { System::Globalization::CultureInfo ^ get(); };
public static System.Globalization.CultureInfo CurrentUICulture { get; set; }
public static System.Globalization.CultureInfo CurrentUICulture { get; }
member this.CurrentUICulture : System.Globalization.CultureInfo with get, set
member this.CurrentUICulture : System.Globalization.CultureInfo
Public Shared Property CurrentUICulture As CultureInfo
Public Shared ReadOnly Property CurrentUICulture 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.

注釈

現在の UI カルチャはスレッドごとのプロパティです。 つまり、各スレッドには独自の現在の UI カルチャがあります。 このプロパティは、.NET Framework 4.6 以降でプロパティに割り当てられたオブジェクトをCultureInfo取得または設定することとSystem.Threading.Thread.CurrentThread.CurrentUICulture同じです。 スレッドが開始されると、その UI カルチャは最初に次のように決定されます。

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

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

    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 UI culture is {0}",
                            Thread.CurrentThread.CurrentUICulture.Name);
          Thread.CurrentThread.CurrentUICulture = new CultureInfo("pt-BR");
          // Change the current UI culture to Portuguese (Brazil).
          Console.WriteLine("Current UI culture changed to {0}",
                            Thread.CurrentThread.CurrentUICulture.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("UI Culture of task {0} on thread {1} is {2}",
                                                     Task.CurrentId,
                                                     Thread.CurrentThread.ManagedThreadId,
                                                     Thread.CurrentThread.CurrentUICulture.Name);
                                } ));
    
          await Task.WhenAll(tasks.ToArray());
       }
    }
    // The example displays output like the following:
    //     The current UI culture is en-US
    //     Current UI culture changed to pt-BR
    //     Application thread is thread 9
    //     UI Culture of task 2 on thread 11 is pt-BR
    //     UI Culture of task 1 on thread 10 is pt-BR
    //     UI Culture of task 3 on thread 11 is pt-BR
    //     UI Culture of task 5 on thread 11 is pt-BR
    //     UI Culture of task 6 on thread 11 is pt-BR
    //     UI 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 UI culture is {0}", 
                            Thread.CurrentThread.CurrentUICulture.Name)
          Thread.CurrentThread.CurrentUICulture = New CultureInfo("pt-BR")
          ' Change the current UI culture to Portuguese (Brazil).
          Console.WriteLine("Current culture changed to {0}",
                            Thread.CurrentThread.CurrentUICulture.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.CurrentUICulture.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 参照してください。

  • WindowsGetUserDefaultUILanguage関数を呼び出す。

注意

.NET Compact Framework では、 CurrentUICulture プロパティは読み取り専用です。 現在の UI カルチャはシステムの地域設定によって決定され、プログラムで変更することはできません。

.NET Framework 4.6 以降では、スレッドで使用されるユーザー インターフェイス カルチャを変更するには、プロパティをThread.CurrentUICulture新しいカルチャに設定します。 この方法でスレッドの UI カルチャを明示的に変更した場合、スレッドがアプリケーション ドメインの境界を越えた場合、その変更は保持されます。

注意

.NET Framework 4.5.2 以前のバージョンでは、CurrentUICultureプロパティは読み取り専用です。 つまり、プロパティ値を取得することはできますが、設定することはできません。 現在の UI カルチャを変更するには、新しい UI カルチャを CultureInfo 表すオブジェクトをプロパティに Thread.CurrentThread.CurrentUICulture 割り当てます。 .NET Framework 4.6 以降では、CultureInfo.CurrentUICultureプロパティは読み取り/書き込み可能です。プロパティの値を設定および取得できます。 新しいカルチャを表すオブジェクトに CultureInfo プロパティ値を設定すると、プロパティの Thread.CurrentThread.CurrentCulture 値も変更されます。

このセクションの内容:

現在の UI カルチャの取得
現在の UI カルチャを明示的に設定する
現在の UI カルチャを暗黙的に設定する
セキュリティに関する考慮事項
現在の UI カルチャとWindows アプリ\

現在の UI カルチャの取得

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

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo culture = CultureInfo.CurrentUICulture;
      Console.WriteLine("The current UI culture is {0} [{1}]",
                        culture.NativeName, culture.Name);
   }
}
// The example displays output like the following:
//       The current UI 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 UI culture is {0} [{1}]",
                        culture.NativeName, culture.Name)
   End Sub
End Module
' The example displays output like the following:
'     The current UI culture is English (United States) [en-US]

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

現在の UI カルチャを明示的に設定する

.NET Framework 4.6 以降では、新しいカルチャを表すオブジェクトをCultureInfoプロパティに割り当てることで、現在の UI カルチャをCultureInfo.CurrentUICulture変更できます。 現在の UI カルチャは、特定のカルチャ (en-US や de-DE など) またはニュートラル カルチャ (en や de など) に設定できます。 次の使用例は、現在の UI カルチャを fr-FR またはフランス語 (フランス) に設定します。

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      Console.WriteLine("The current UI culture: {0}",
                        CultureInfo.CurrentUICulture.Name);

      CultureInfo.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr-FR");
      Console.WriteLine("The current UI culture: {0}",
                        CultureInfo.CurrentUICulture.Name);
   }
}
// The example displays output like the following:
//       The current UI culture: en-US
//       The current UI culture: fr-FR
Imports System.Globalization
Imports System.Threading

Module Example
   Public Sub Main()
      Console.WriteLine("The current UI culture: {0}", 
                        CultureInfo.CurrentUICulture.Name)
      
      CultureInfo.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr-FR")
      Console.WriteLine("The current UI culture: {0}", 
                        CultureInfo.CurrentUICulture.Name)
   End Sub
End Module
' The example displays output like the following:
'       The current UI culture: en-US
'       The current UI culture: fr-FR

マルチスレッド アプリケーションでは、そのカルチャを表すオブジェクトをスレッドのプロパティに割り当てること CultureInfo で、任意のスレッドの Thread.CurrentUICulture UI カルチャを明示的に設定できます。 設定するカルチャが現在のスレッドであるスレッドの場合は、プロパティに新しいカルチャを CultureInfo.CurrentUICulture 割り当てることができます。 スレッドの UI カルチャが明示的に設定されている場合、そのスレッドはアプリケーション ドメインの境界を越えて別のアプリケーション ドメインでコードを実行する場合でも、同じカルチャを保持します。

現在の UI カルチャを暗黙的に設定する

メイン アプリケーション スレッドを含むスレッドが最初に作成されると、既定では現在の UI カルチャが次のように設定されます。

  • プロパティ値が指定されていないnull場合は、現在のDefaultThreadCurrentUICultureアプリケーション ドメインのプロパティで定義されたカルチャを使用します。

  • システムの既定のカルチャを使用する。 Windows オペレーティング システムを使用するシステムでは、共通言語ランタイムはWindowsGetUserDefaultUILanguage関数を呼び出して現在の UI カルチャを設定します。 GetUserDefaultUILanguage は、ユーザーによって設定された既定の UI カルチャを返します。 ユーザーが既定の UI 言語を設定していない場合は、システムに最初にインストールされたカルチャが返されます。

スレッドがアプリケーションの境界を越えて別のアプリケーション ドメインでコードを実行する場合、そのカルチャは、新しく作成されたスレッドと同じ方法で決定されます。

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

セキュリティに関する考慮事項

現在のスレッドのカルチャを変更するには、値が SecurityPermission 設定されたアクセス許可が ControlThread 必要です。

注意事項

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

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

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

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

適用対象

こちらもご覧ください