CultureInfo.DefaultThreadCurrentUICulture プロパティ

定義

現在のアプリケーション ドメイン内のスレッドの既定 UI カルチャを取得または設定します。Gets or sets the default UI culture for threads in the current application domain.

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

プロパティ値

現在のアプリケーション ドメイン内のスレッドの既定 UI カルチャ、または現在のシステム UI カルチャがアプリケーション ドメイン内の既定スレッド UI カルチャである場合は nullThe default UI culture for threads in the current application domain, or null if the current system UI culture is the default thread UI culture in the application domain.

例外

設定操作で、Name プロパティ値が正しくありません。In a set operation, the Name property value is invalid.

次の例は、新しいスレッドの現在のカルチャを定義する際の .NET Framework の既定の動作を示しています。The following example illustrates the default behavior of the .NET Framework in defining the current culture of a new thread. 英語とロシア語の言語リソースが使用されています。It uses English and Russian language resources. GreetingStrings という名前のテキストファイルには、英語の言語リソースが含まれています。The following text file named GreetingStrings.txt contains the English language resources:

greeting =Hello again!  
newGreeting=Hello!  

次のコマンドを使用してリソースファイルジェネレーターを使用することにより、GreetingStrings という名前のバイナリファイルにコンパイルされます。It is compiled to a binary .resources file named GreetingStrings.resources by using the Resource File Generator with the following command.

resgen greetingstrings.txt  

GreetingStrings.ru という名前のテキストファイルには、ロシア語の言語リソースが含まれています。The following text file named GreetingStrings.ru-RU.txt contains the Russian language resources:

greeting=Еще раз привет!  
newGreeting=Привет!  

次のコマンドを使用して、リソースファイルジェネレーターを使用して GreetingStrings.ru という名前のバイナリ .resources ファイルにコンパイルされます。It is compiled to a binary .resources file named GreetingStrings.ru-RU.resources by using the Resource File Generator with the following command.

resgen greetingstrings.ru-RU.txt  

次に示すアプリケーションコードは、Example1 または Example1.cs という名前のファイルに格納されています。The application code, which is shown below, resides in a file named Example1.vb or Example1.cs. これは、Visual Basic コンパイラに対して次のコマンドを使用して、実行可能ファイルにコンパイルされます。It is compiled to an executable by using the following command for the Visual Basic compiler:

vbc Example1.vb /resource:GreetingStrings.resources  

C#コンパイラの場合、コマンドは次のようになります。For the C# compiler, the command is similar:

csc /resource:GreetingStrings.resources Example1.cs  

これにより、フォールバックカルチャのリソースと共に、例の実行可能コードを含むアセンブリが作成されます。This creates an assembly that includes the example's executable code along with the resources for its fallback culture. また、次のコマンドを使用して、アセンブリリンカーを使用してロシア語 (ロシア) カルチャ用のリソースファイルを作成することもできます。You can also use the Assembly Linker to create the resource file for the Russian (Russia) culture with the following command:

>al /embed:greetingstrings.ru-RU.resources /c:ru-RU /template:example1.exe /out:ru-RU\Example1.resources.dll  

この例では、起動時に、既定のシステムカルチャが既にロシア語 (ロシア) である場合を除き、すべてのシステムで現在のカルチャと現在の UI カルチャをロシア語 (ロシア) に設定します。At startup, the example sets the current culture and the current UI culture to Russian (Russia) on all systems except those on which the default system culture is already Russian (Russia). 既定のシステムカルチャが既にロシア語 (ロシア) の場合、コードは現在のカルチャと現在の UI カルチャを英語 (米国) に設定します。If the default system culture is already Russian (Russia), the code sets the current culture and the current UI culture to English (United States). 次に、ShowGreeting ルーチンを呼び出します。これにより、最初に呼び出されたときに単純な文字列が表示され、後続のメソッド呼び出しでは少し異なる文字列が表示されます。It then calls the ShowGreeting routine, which displays a simple string the first time it is called and a slightly different string on subsequent method calls. 次に、新しいスレッドを作成します。これにより、ShowGreeting ルーチンも実行されます。Next, it creates a new thread, which also executes the ShowGreeting routine.

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

[assembly:NeutralResourcesLanguageAttribute("en-US")]

public class Example
{
   private static int nGreetings = 0;
   private static ResourceManager rm;

   public static void Main()
   {
      AppDomain domain = AppDomain.CurrentDomain;
      rm = new ResourceManager("GreetingStrings", 
                               typeof(Example).Assembly);
                  
      CultureInfo culture = null;
      if (Thread.CurrentThread.CurrentUICulture.Name == "ru-RU")
         culture = CultureInfo.CreateSpecificCulture("en-US");
      else
         culture = CultureInfo.CreateSpecificCulture("ru-RU");

      Thread.CurrentThread.CurrentCulture = culture;
      Thread.CurrentThread.CurrentUICulture = culture;

      ShowGreeting();
      Thread.Sleep(1000);

      Thread workerThread = new Thread(Example.ShowGreeting);
      workerThread.Start();
   }

   private static void ShowGreeting()
   {
      string greeting = nGreetings == 0 ? rm.GetString("newGreeting") :
                                          rm.GetString("greeting");
      nGreetings++;
      Console.WriteLine("{0}", greeting);   
   }
}
// The example displays the following output:
//       Привет!
//       Hello again!
Imports System.Globalization
Imports System.Reflection
Imports System.Resources
Imports System.Threading

<Assembly:NeutralResourcesLanguageAttribute("en-US")>

Public Class Example
   Private Shared nGreetings As Integer = 0
   Private Shared rm As ResourceManager

   Public Shared Sub Main()
      Dim domain As AppDomain = AppDomain.CurrentDomain
      rm = New ResourceManager("GreetingStrings", 
                               GetType(Example).Assembly)
                  
      Dim culture As CultureInfo = Nothing
      If Thread.CurrentThread.CurrentUICulture.Name = "ru-RU" Then
         culture = CultureInfo.CreateSpecificCulture("en-US")
      Else
         culture = CultureInfo.CreateSpecificCulture("ru-RU")
      End If   
      Thread.CurrentThread.CurrentCulture = culture
      Thread.CurrentThread.CurrentUICulture = culture

      ShowGreeting()
      Thread.Sleep(1000)

      Dim workerThread As New Thread(AddressOf Example.ShowGreeting)
      workerThread.Start()
   End Sub
   
   Private Shared Sub ShowGreeting()
      Dim greeting As String = CStr(IIf(nGreetings = 0, 
                                        rm.GetString("newGreeting"),
                                        rm.GetString("greeting")))
      nGreetings += 1
      Console.WriteLine("{0}", greeting)   
   End Sub
End Class
' The example displays the following output:
'       Привет!
'       Hello again!

この例の出力に示すように、システムカルチャが英語 (米国) であるコンピューターでこの例を実行すると、メインスレッドはロシア語の初期文字列を表示します。As the output from the example shows, when the example is run on a computer whose system culture is English (United States), the main thread displays its initial string in Russian. ただし、ワーカースレッドのカルチャは、アプリケーションの現在のカルチャではなく、現在の Windows システムカルチャから派生しているので、ワーカースレッドはその文字列を英語で表示します。However, because the worker thread's culture is derived from the current Windows system culture rather than the application's current culture, the worker thread displays its string in English.

次の例では、DefaultThreadCurrentCulture プロパティと DefaultThreadCurrentUICulture プロパティを使用して、新しいアプリケーションスレッドの現在のカルチャと現在の UI カルチャを定義します。The following example uses the DefaultThreadCurrentCulture and DefaultThreadCurrentUICulture properties to define the current culture and current UI culture of a new application thread.

この例では、前の例と同じリソースファイルを使用します。The example uses the same resources files as the previous example. コンパイルして、ローカライズされたロシア語の言語リソースをサテライトアセンブリに埋め込むためのコマンドも同じですが、実行可能アセンブリの名前が変更される点が異なります。The commands to compile and to embed the localized Russian language resources into a satellite assembly are also identical, except that the name of the executable assembly changes.

この例では、起動時に、既定のシステムカルチャが既にロシア語 (ロシア) である場合を除き、すべてのシステムで現在のカルチャと現在の UI カルチャをロシア語 (ロシア) に設定します。At startup, the example sets the current culture and the current UI culture to Russian (Russia) on all systems except those on which the default system culture is already Russian (Russia). 既定のシステムカルチャが既にロシア語 (ロシア) である場合は、現在のカルチャと現在の UI カルチャが英語 (米国) に設定されます。If the default system culture is already Russian (Russia), it sets the current culture and the current UI culture to English (United States). 次に、ShowGreeting ルーチンを呼び出します。これにより、最初に呼び出されたときに単純な文字列が表示され、後続のメソッド呼び出しでは少し異なる文字列が表示されます。It then calls the ShowGreeting routine, which displays a simple string the first time it is called and a slightly different string on subsequent method calls. 次に、新しいスレッドを作成します。これにより、ShowGreeting ルーチンも実行されます。Next, it creates a new thread, which also executes the ShowGreeting routine.

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

[assembly:NeutralResourcesLanguageAttribute("en-US")]

public class Example
{
   private static int nGreetings = 0;
   private static ResourceManager rm;

   public static void Main()
   {
      AppDomain domain = AppDomain.CurrentDomain;
      rm = new ResourceManager("GreetingStrings", 
                               typeof(Example).Assembly);
                  
      CultureInfo culture = null;
      if (Thread.CurrentThread.CurrentUICulture.Name == "ru-RU")
         culture = CultureInfo.CreateSpecificCulture("en-US");
      else
         culture = CultureInfo.CreateSpecificCulture("ru-RU");

      CultureInfo.DefaultThreadCurrentCulture = culture;
      CultureInfo.DefaultThreadCurrentUICulture = culture;

      Thread.CurrentThread.CurrentCulture = culture;
      Thread.CurrentThread.CurrentUICulture = culture;

      ShowGreeting();
      Thread.Sleep(1000);

      Thread workerThread = new Thread(Example.ShowGreeting);
      workerThread.Start();
   }

   private static void ShowGreeting()
   {
      string greeting = nGreetings == 0 ? rm.GetString("newGreeting") :
                                          rm.GetString("greeting");
      nGreetings++;
      Console.WriteLine("{0}", greeting);   
   }
}
// The example displays the following output:
//       Привет!
//       Еще раз привет!
Imports System.Globalization
Imports System.Reflection
Imports System.Resources
Imports System.Threading

<Assembly:NeutralResourcesLanguageAttribute("en-US")>

Public Class Example
   Private Shared nGreetings As Integer = 0
   Private Shared rm As ResourceManager

   Public Shared Sub Main()
      Dim domain As AppDomain = AppDomain.CurrentDomain
      rm = New ResourceManager("GreetingStrings", 
                               GetType(Example).Assembly)
                  
      Dim culture As CultureInfo = Nothing
      If Thread.CurrentThread.CurrentUICulture.Name = "ru-RU" Then
         culture = CultureInfo.CreateSpecificCulture("en-US")
      Else
         culture = CultureInfo.CreateSpecificCulture("ru-RU")
      End If   
      CultureInfo.DefaultThreadCurrentCulture = culture
      CultureInfo.DefaultThreadCurrentUICulture = culture
       
      Thread.CurrentThread.CurrentCulture = culture
      Thread.CurrentThread.CurrentUICulture = culture

      ShowGreeting()
      Thread.Sleep(1000)

      Dim workerThread As New Thread(AddressOf Example.ShowGreeting)
      workerThread.Start()
   End Sub
   
   Private Shared Sub ShowGreeting()
      Dim greeting As String = CStr(IIf(nGreetings = 0, 
                                        rm.GetString("newGreeting"),
                                        rm.GetString("greeting")))
      nGreetings += 1
      Console.WriteLine("{0}", greeting)   
   End Sub
End Class
' The example displays the following output:
'       Привет!
'       Еще раз привет!

この例の出力に示すように、システムカルチャが英語 (米国) であるコンピューターでこの例を実行すると、メインスレッドとワーカースレッドの両方で、ロシア語の言語で文字列が表示されます。As the output from the example shows, when the example is run on a computer whose system culture is English (United States), both the main thread and the worker thread display their strings in the Russian language.

注釈

.NET Framework 4.NET Framework 4 以前のバージョンでは、既定で、すべてのスレッドの UI カルチャが Windows システムのカルチャに設定されています。In the .NET Framework 4.NET Framework 4 and previous versions, by default, the UI culture of all threads is set to the Windows system culture. 現在の UI カルチャが既定のシステムカルチャと異なるアプリケーションの場合、この動作は望ましくないことがあります。For applications whose current UI culture differs from the default system culture, this behavior is often undesirable. .NET Framework 4.5.NET Framework 4.5では、DefaultThreadCurrentUICulture プロパティを使用して、アプリケーションドメイン内のすべてのスレッドの既定の UI カルチャを定義できます。In the .NET Framework 4.5.NET Framework 4.5, the DefaultThreadCurrentUICulture property lets you define the default UI culture of all threads in an application domain.

重要

アプリケーションドメインで実行されている既存のスレッドの UI カルチャを明示的に設定していない場合は、DefaultThreadCurrentUICulture プロパティを設定すると、これらのスレッドのカルチャも変更されます。If you have not explicitly set the UI culture of any existing threads executing in an application domain, setting the DefaultThreadCurrentUICulture property also changes the culture of these threads. ただし、これらのスレッドが別のアプリケーションドメインで実行される場合、そのカルチャは、そのアプリケーションドメインの DefaultThreadCurrentUICulture プロパティによって定義されます。既定値が定義されていない場合は、既定のシステムカルチャによって定義されます。However, if these threads execute in another application domain, their culture is defined by the DefaultThreadCurrentUICulture property in that application domain or, if no default value is defined, by the default system culture. このため、メインアプリケーションスレッドのカルチャは常に明示的に設定することをお勧めします。また、DefaultThreadCurrentUICulture プロパティに依存せずに、メインアプリケーションスレッドのカルチャを定義することをお勧めします。Because of this, we recommend that you always explicitly set the culture of your main application thread and do not rely on the DefaultThreadCurrentUICulture property to define the culture of the main application thread.

明示的に設定されていない限り、DefaultThreadCurrentUICulture プロパティの値は null、明示的なカルチャが割り当てられていないアプリケーションドメイン内のすべてのスレッドの現在のカルチャは、既定の Windows システムカルチャによって定義されます。Unless it is set explicitly, the value of the DefaultThreadCurrentUICulture property is null, and the current culture of all threads in an application domain that have not been assigned an explicit culture is defined by the default Windows system culture.

カルチャ、スレッド、およびアプリケーションドメインの詳細については、CultureInfo リファレンスページの「カルチャとスレッド」および「カルチャおよびアプリケーションドメイン」のセクションを参照してください。For more information about cultures, threads, and application domains, see the "Culture and threads" and "Culture and application domains" sections in the CultureInfo reference page.

適用対象

こちらもご覧ください