다음을 통해 공유


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

속성 값

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

예외

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

예제

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

greeting =Hello again!
newGreeting=Hello!

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

resgen greetingstrings.txt

GreetingStrings.ru-RU.txt 라는 다음 텍스트 파일에는 러시아어 리소스가 포함되어 있습니다.

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

다음 명령과 함께 리소스 파일 생성기를 사용하여 GreetingStrings.ru-RU.resources라는 이진 . 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 시스템 문화권에서 파생 됩니다 때문에 작업자 스레드 영어에서 문자열을 표시 합니다.

다음 예제에서는 및 DefaultThreadCurrentUICulture 속성을 사용하여 DefaultThreadCurrentCulture 새 애플리케이션 스레드의 현재 문화권 및 현재 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 참조 페이지입니다.

적용 대상

추가 정보