CultureInfo.CurrentUICulture 속성

정의

런타임에 문화권별 리소스를 조회하기 위해 Resource Manager 사용하는 현재 사용자 인터페이스 문화권을 나타내는 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; }
static member CurrentUICulture : System.Globalization.CultureInfo with get, set
static member CurrentUICulture : System.Globalization.CultureInfo
Public Shared Property CurrentUICulture As CultureInfo
Public Shared ReadOnly Property CurrentUICulture As CultureInfo

속성 값

Resource Manager 런타임에 문화권별 리소스를 조회하는 데 사용하는 문화권입니다.

예외

속성이 .로 설정됩니다 null.

속성은 리소스 파일을 찾는 데 사용할 수 없는 문화권 이름으로 설정됩니다. 리소스 파일 이름은 문자, 숫자, 하이픈 또는 밑줄만 포함할 수 있습니다.

예제

다음 코드 예제에서는 현재 스레드 및 CurrentCulture 변경 CurrentUICulture 하는 방법을 보여 줍니다.

using System;
using System.Globalization;

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 Example2
   Public Sub Run()
      ' 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.

설명

이 속성은 CurrentUICulture 스레드당 속성입니다. 즉, 각 스레드에는 고유한 현재 UI 문화권이 있습니다. 이 속성은 CultureInfo 개체를 System.Threading.Thread.CurrentThread.CurrentUICulture 속성에 할당하여 검색하거나 설정하는 것과 동일합니다. 스레드가 시작되면 해당 UI 문화권은 처음에 다음과 같이 결정됩니다.

  • 속성 값이 DefaultThreadCurrentUICulture이 아닌 경우, 스레드가 실행 중인 애플리케이션 도메인의 null 속성에 의해 지정된 문화를 검색합니다.

  • 스레드가 작업 기반 비동기 작업을 실행하는 스레드 풀 스레드인 경우 해당 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;
    
    public class Example
    {
        public static async Task Main()
        {
            var tasks = new List<Task>();
            Console.WriteLine($"The current UI culture is {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 {Thread.CurrentThread.CurrentUICulture.Name}");
            Console.WriteLine($"Application thread is thread {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 {Task.CurrentId} on thread {Thread.CurrentThread.ManagedThreadId} is {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.Globalization
    Imports System.Threading
    
    Module Example1
        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 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 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 UI culture is en-US
    '     Current UI 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
    

    자세한 내용은 Culture 및 작업 기반 비동기 작업참조하세요.

  • Windows GetUserDefaultUILanguage 함수를 호출합니다.

스레드에서 사용하는 사용자 인터페이스 문화권을 변경하려면 속성을 새 문화권으로 설정합니다 Thread.CurrentUICulture . 이러한 방식으로 스레드의 UI 문화권을 명시적으로 변경하는 경우 스레드가 애플리케이션 도메인 경계를 넘으면 해당 변경 내용이 유지됩니다.

비고

속성 값을 새 문화권을 나타내는 개체로 CultureInfo 설정하면 속성 값 Thread.CurrentThread.CurrentCulture 도 변경됩니다.

현재 UI 문화 설정 가져오기

속성은 CultureInfo.CurrentUICulture 스레드별 설정입니다. 즉, 각 스레드에는 자체 UI 문화권이 있을 수 있습니다. 속성 값을 검색하여 현재 스레드의 UI 문화권을 가져오는 방법은 다음 예제가 잘 보여줍니다.

using System;
using System.Globalization;

public class Example2
{
    public static void Main()
    {
        CultureInfo culture = CultureInfo.CurrentUICulture;
        Console.WriteLine($"The current UI culture is {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 Example3
    Public Sub Main()
        Dim culture As CultureInfo = CultureInfo.CurrentUICulture
        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]

속성Thread.CurrentUICulture에서 현재 스레드의 UI 문화 설정 값을 조회할 수도 있습니다.

현재 UI 문화권을 명시적으로 설정

속성에 새 문화권을 나타내는 개체를 CultureInfo 할당하여 현재 UI 문화 CultureInfo.CurrentUICulture 권을 변경할 수 있습니다. 현재 UI 문화권은 특정 문화권(예: en-US 또는 de-DE) 또는 중립 문화권(예: en 또는 de)으로 설정할 수 있습니다. 다음은 현재 UI 문화권을 fr-FR 또는 프랑스어(프랑스)로 설정하는 예제입니다.

using System;
using System.Globalization;

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

        CultureInfo.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr-FR");
        Console.WriteLine($"The current UI culture: {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

Module Example2
    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 문화권은 다음과 같이 설정됩니다.

  • 속성 값이 DefaultThreadCurrentUICulture가 아닌 경우, 현재 애플리케이션 도메인에 대해 null 속성으로 정의된 문화권을 사용합니다.
  • 시스템의 기본 문화권을 사용하여 Windows 운영 체제를 사용하는 시스템에서 공용 언어 런타임은 Windows GetUserDefaultUILanguage 함수를 호출하여 현재 UI 문화권을 설정합니다. GetUserDefaultUILanguage 는 사용자가 설정한 기본 UI 문화권을 반환합니다. 사용자가 기본 UI 언어를 설정하지 않은 경우 시스템에 원래 설치된 언어 또는 문화 설정을 반환합니다.

스레드가 애플리케이션 경계를 넘어 다른 애플리케이션 도메인에서 코드를 실행하는 경우 해당 문화권은 새로 만든 스레드의 문화권과 동일한 방식으로 결정됩니다.

시스템이 설치한 UI 문화권 또는 사용자가 선호하는 UI 문화권과 다른 특정 UI 문화권을 설정하고 애플리케이션이 여러 스레드를 시작하는 경우 스레드가 실행되는 애플리케이션 도메인의 속성에 GetUserDefaultUILanguage 문화권을 할당하지 않는 한 해당 스레드의 현재 UI 문화권은 함수에서 반환되는 문화권 DefaultThreadCurrentUICulture 이 됩니다.

보안 고려 사항

현재 스레드의 문화권을 변경하려면 SecurityPermission 권한이 필요하며, ControlThread 값이 설정되어 있어야 합니다.

Caution

스레드 조작은 스레드와 연결된 보안 상태 때문에 위험합니다. 따라서 이 권한은 신뢰할 수 있는 코드에만 부여된 다음 필요에 따라 지정해야 합니다. 반 신뢰할 수 있는 코드에서는 스레드 문화권을 변경할 수 없습니다.

적용 대상

추가 정보