다음을 통해 공유


System.Globalization.CultureInfo.CurrentUICulture 속성

이 문서에서는 이 API에 대한 참조 설명서에 대한 추가 설명서를 제공합니다.

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

  • 지정 된 문화권을 검색 하 여는 DefaultThreadCurrentUICulture 는 스레드가 실행 중인, 속성 값이 경우 애플리케이션 도메인 속성 null합니다.

  • 스레드가 작업 기반 비동기 작업을 실행하는 스레드 풀 스레드이고 앱이 .NET Framework 4.6 이상 버전의 .NET Framework를 대상으로 하는 경우 해당 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 {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.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 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 참조하세요.

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

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

참고 항목

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

현재 UI 문화권 가져오기

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

using System;
using System.Globalization;

public class Example2
{
    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 Example3
    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 Example1
{
    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

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

다중 스레드 애플리케이션을 설정할 수 있습니다 명시적으로 모든 스레드의 UI 문화권을 할당 하 여는 CultureInfo 스레드의 문화권을 나타내는 개체 Thread.CurrentUICulture 속성입니다. 설정하려는 문화권이 현재 스레드인 스레드인 경우 속성에 새 문화권을 할당할 CultureInfo.CurrentUICulture 수 있습니다. 스레드의 UI 문화권을 명시적으로 설정 된 경우, 애플리케이션 도메인 경계를 넘나들 고 다른 애플리케이션 도메인에서 코드를 실행 하는 경우에 스레드에서 동일한 문화권을 유지 하는 합니다.

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

기본 애플리케이션 스레드를 포함 하는 스레드를 첫 번째 경우, 기본적으로 생성의 현재 UI 문화권을 다음과 같이 설정:

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

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

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

보안 고려 사항

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

주의

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

현재 UI 문화권 및 UWP 앱

UWP(유니버설 Windows 플랫폼) 앱 CurrentUICulture 에서 속성은 .NET Framework 및 .NET Core 앱과 마찬가지로 읽기/쓰기가 가능합니다. 이 속성을 사용하여 현재 문화권을 가져와서 설정할 수 있습니다. 그러나 UWP 앱은 현재 문화권과 현재 UI 문화권을 구분하지 않습니다. 및 속성은 CurrentCulture Windows.ApplicationModel.Resources.Core.ResourceManager.DefaultContext.Languages 컬렉션의 첫 번째 값에 매핑됩니다.CurrentUICulture

.NET Framework 및 .NET Core 앱에서 현재 UI 문화권은 스레드별 설정이며 CurrentUICulture 속성은 현재 스레드의 UI 문화권만 반영합니다. UWP 앱에서 현재 문화권은 전역 설정인 Windows.ApplicationModel.Resources.Core.ResourceManager.DefaultContext.Languages 속성에 매핑됩니다. 속성을 설정하면 CurrentCulture 전체 앱의 문화권이 변경됩니다. 문화권은 스레드별로 설정할 수 없습니다.