CultureInfo.DefaultThreadCurrentUICulture 속성

정의

현재 애플리케이션 도메인의 스레드에 대한 기본 UI 문화권을 가져오거나 설정합니다.

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; }
public static System.Globalization.CultureInfo? DefaultThreadCurrentUICulture { get; set; }
member this.DefaultThreadCurrentUICulture : System.Globalization.CultureInfo with get, set
Public Shared Property DefaultThreadCurrentUICulture As CultureInfo

속성 값

CultureInfo

기본 UI 문화권은 현재 어플리케이션 도메인에 있는 스레드에 해당하며 현재 시스템 UI 문화권이 애플리케이션 도메인에 있는 기본 스레드 문화권인 경우 null입니다.

예외

집합 작업에서 Name 속성 값이 올바르지 않습니다.

예제

다음 예제에서는 새 스레드의 현재 문화권을 정의 하는 .NET Framework의 기본 동작을 보여 줍니다. 영어 및 러시아어 리소스를 사용 합니다. 다음 텍스트 파일 GreetingStrings.txt 영어 리소스를 포함 합니다.

greeting =Hello again!
newGreeting=Hello!

다음 명령을 사용 하 여 리소스 파일 생성기 를 사용 하 여 GreetingStrings 라는 이진 .resources 파일로 컴파일됩니다.

resgen greetingstrings.txt

GreetingStrings.ru-RU.txt 라는 텍스트 파일은 러시아어 언어 리소스를 포함 합니다.

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

다음 명령을 사용 하 여 리소스 파일 생성기 를 사용 하 여 GreetingStrings.ru 라는 이진 .resources 파일로 컴파일됩니다.

resgen greetingstrings.ru-RU.txt

아래 표시 되는 애플리케이션 코드는 Example1.cs 또는 Example1.vb 라는 파일에 상주 합니다. Visual Basic 컴파일러에 다음 명령을 사용 하 여 실행 파일로 컴파일됩니다.

vbc Example1.vb /resource:GreetingStrings.resources

C # 컴파일러의 경우 명령은 유사 합니다.

csc /resource:GreetingStrings.resources Example1.cs

이렇게 하면 해당 대체 문화권의 리소스와 함께 예제의 실행 코드를 포함 하는 어셈블리가 생성 됩니다. 다음 명령을 사용 하 여 어셈블리 링커 를 사용 하 여 러시아어 (러시아) 문화권에 대 한 리소스 파일을 만들 수도 있습니다.

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

시작 시이 예제에서는 기본 시스템 문화권이 이미 러시아어 (러시아) 인 경우를 제외 하 고 모든 시스템에서 현재 문화권과 현재 UI 문화권을 러시아어 (러시아)로 설정 합니다. 기본 시스템 문화권이 이미 러시아어 (러시아) 인 경우 코드는 현재 문화권과 현재 UI 문화권을 영어 (미국)로 설정 합니다. 그런 다음 루틴을 호출 하 여 ShowGreeting 처음 호출 될 때 간단한 문자열을 표시 하 고 후속 메서드 호출에서 약간 다른 문자열을 표시 합니다. 그런 다음, 새 스레드를 만들어 루틴도 실행 ShowGreeting 합니다.

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!

예제의 출력에 표시 된 것 처럼, 시스템 문화권이 영어 (미국) 인 컴퓨터에서이 예제를 실행 하면 주 스레드는 해당 초기 문자열을 러시아어로 표시 합니다. 그러나 작업자 스레드의 문화권은 애플리케이션의 현재 문화권 보다는 현재 Windows 시스템 문화권에서 파생 됩니다 때문에 작업자 스레드 영어에서 문자열을 표시 합니다.

다음 예제에서는 합니다 DefaultThreadCurrentCultureDefaultThreadCurrentUICulture 현재 문화권 및 새 애플리케이션 스레드의 현재 UI 문화권을 정의 하는 속성입니다.

이 예제에서는 이전 예제와 동일한 리소스 파일을 사용 합니다. 지역화 된 러시아어 언어 리소스를 컴파일하여 위성 어셈블리에 포함 하는 명령은 실행 가능 어셈블리의 이름이 변경 되는 경우를 제외 하 고도 동일 합니다.

시작 시이 예제에서는 기본 시스템 문화권이 이미 러시아어 (러시아) 인 경우를 제외 하 고 모든 시스템에서 현재 문화권과 현재 UI 문화권을 러시아어 (러시아)로 설정 합니다. 기본 시스템 문화권이 이미 러시아어 (러시아) 인 경우 현재 문화권과 현재 UI 문화권을 영어 (미국)로 설정 합니다. 그런 다음 루틴을 호출 하 여 ShowGreeting 처음 호출 될 때 간단한 문자열을 표시 하 고 후속 메서드 호출에서 약간 다른 문자열을 표시 합니다. 그런 다음, 새 스레드를 만들어 루틴도 실행 ShowGreeting 합니다.

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:
'       Привет!
'       Еще раз привет!

예제의 출력에 표시 된 것 처럼,이 예제는 시스템 문화권이 영어 (미국) 인 컴퓨터에서 실행 되는 경우 주 스레드와 작업자 스레드는 모두 러시아어 언어로 문자열을 표시 합니다.

설명

.NET Framework 4 이전 버전에서는 기본적으로 모든 스레드의 UI 문화권이 Windows 시스템 문화권으로 설정 됩니다. 애플리케이션의 기본 시스템 문화권에서 다른 현재 UI 문화권 인 경우이 동작이 종종 필요 없는 합니다. .NET Framework 4.5에서는 DefaultThreadCurrentUICulture 속성을 사용 하 여 응용 프로그램 도메인의 모든 스레드에 대 한 기본 UI 문화권을 정의할 수 있습니다.

중요

설정 하는 애플리케이션 도메인에서 실행의 UI 문화권을 명시적으로 설정 하지 않은 경우 모든 기존 스레드를 DefaultThreadCurrentUICulture 속성에 이러한 스레드 문화권도 변경 합니다. 그러나 이러한 스레드를 다른 애플리케이션 도메인에서 실행 하는 경우 해당 문화권 정의한는 DefaultThreadCurrentUICulture 해당 애플리케이션 도메인의 속성 또는 기본값이 기본 시스템 문화권에 의해 정의 된 경우. 이 때문에 항상 명시적으로 기본 애플리케이션 스레드 culture를 설정 하 고 좋습니다에 의존 하지 마십시오는 DefaultThreadCurrentUICulture 속성을 기본 애플리케이션 스레드의 문화권을 정의 합니다.

값을 명시적으로 설정 되어 있지 않으면 합니다 DefaultThreadCurrentUICulture 속성은 null, 명시적 culture 할당 되지 않은 애플리케이션 도메인의 모든 스레드는 현재 문화권 기본 Windows 시스템 문화권에 의해 정의 됩니다.

문화권, 스레드 및 애플리케이션 도메인에 대 한 자세한 내용은 "문화권 및 스레드"를 참조 하세요. 및 "문화권 및 애플리케이션 도메인" 섹션을 CultureInfo 참조 페이지입니다.

적용 대상

추가 정보