CultureInfo.CurrentCulture 속성

정의

현재 스레드 CultureInfo 및 작업 기반 비동기 작업에서 사용하는 문화권에 해당하는 개체를 가져오거나 설정합니다.

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

속성 값

CultureInfo

현재 스레드 및 작업 기반 비동기 작업에서 사용하는 문화권입니다.

예외

속성이 null로 설정됩니다.

예제

다음 예제에서는 변경 하는 방법에 설명 합니다 CurrentCultureCurrentUICulture 현재 스레드의 합니다.

using namespace System;
using namespace System::Globalization;
using namespace System::Threading;

int main()
{
   // Display the name of the current thread culture.
   Console::WriteLine("CurrentCulture is {0}.", CultureInfo::CurrentCulture->Name);
   
   // Change the current culture to th-TH.
   CultureInfo::CurrentCulture = gcnew CultureInfo("th-TH",false);
   Console::WriteLine("CurrentCulture is now {0}.", CultureInfo::CurrentCulture->Name);
   
   // Displays the name of the CurrentUICulture of the current thread.
   Console::WriteLine("CurrentUICulture is {0}.", CultureInfo::CurrentCulture->Name);
   
   // Changes the CurrentUICulture of the current thread to ja-JP.
   CultureInfo::CurrentUICulture = gcnew CultureInfo("ja-JP",false);
   Console::WriteLine("CurrentUICulture is now {0}.", CultureInfo::CurrentCulture->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.
using System;
using System.Globalization;
using System.Threading;

public class Example
{
   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 Example
   Public Sub 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)
   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.

설명

CultureInfo이 속성 및 관련 개체에서 반환되는 개체는 날짜, 시간, 숫자, 통화 값, 텍스트 정렬 순서, 대/소문자 구분 규칙 및 문자열 비교의 기본 형식을 결정합니다.

현재 문화권은 실행 중인 스레드의 속성입니다. 이 속성을 새 문화권을 나타내는 개체로 설정하면 CultureInfo 속성 Thread.CurrentThread.CurrentCulture 값도 변경됩니다. 그러나 항상 사용 하는 것이 좋습니다는 CultureInfo.CurrentCulture 검색 하 고 현재 문화권을 설정 하는 속성입니다.

CultureInfo이 속성이 반환하는 개체는 읽기 전용입니다. 즉, 예를 들어 를 변경하여 기존 개체를 변경할 수 DateTimeFormat 없습니다. 날짜-시간 형식 또는 현재 문화권의 다른 측면을 변경하려면 새 개체를 만들고 CultureInfo 속성에 할당합니다.

참고

.NET Framework 4.5.2 및 이전 버전에서 CultureInfo.CurrentCulture 속성은 읽기 전용입니다. 즉, 속성 값을 검색할 수 있지만 설정할 수는 없습니다.

이 섹션에서는 다음 작업을 수행합니다.

스레드의 문화권 결정 방법
현재 문화권 얻기
CurrentCulture 속성을 명시적으로 설정
사용자 재정의
문화권 및 Windows 앱

스레드의 문화권 결정 방법

스레드가 시작되면 해당 문화권은 처음에 다음과 같이 결정됩니다.

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

  • 스레드가 작업 기반 비동기 작업을 실행하는 스레드 풀 스레드이고 앱이 .NET Framework 4.6 이상 버전의 .NET Framework 대상으로 하는 경우 해당 문화권은 호출 스레드의 문화권에 따라 결정됩니다. 다음 예제에서는 현재 문화권이 포르투갈어(브라질)로 변경되고 각각 스레드 ID, 작업 ID 및 현재 문화권이 표시되는 6개의 작업을 시작합니다. 각 작업(및 스레드)은 호출 스레드의 문화권이 상속되었습니다.

    using System;
    using System.Collections.Generic;
    using System.Globalization;
    using System.Runtime.Versioning;
    using System.Threading;
    using System.Threading.Tasks;
    
    [assembly:TargetFramework(".NETFramework,Version=v4.6")]
    
    public class Example
    {
       public static async Task Main()
       {
          var tasks = new List<Task>();
          Console.WriteLine("The current culture is {0}",
                            Thread.CurrentThread.CurrentCulture.Name);
          Thread.CurrentThread.CurrentCulture = new CultureInfo("pt-BR");
          // Change the current culture to Portuguese (Brazil).
          Console.WriteLine("Current culture changed to {0}",
                            Thread.CurrentThread.CurrentCulture.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("Culture of task {0} on thread {1} is {2}",
                                                     Task.CurrentId,
                                                     Thread.CurrentThread.ManagedThreadId,
                                                     Thread.CurrentThread.CurrentCulture.Name);
                                } ));
    
          await Task.WhenAll(tasks.ToArray());
       }
    }
    // 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
    
    Imports System.Collections.Generic
    Imports System.Globalization
    Imports System.Runtime.Versioning
    Imports System.Threading
    Imports System.Threading.Tasks
    
    <assembly:TargetFramework(".NETFramework,Version=v4.6")>
    
    Module Example
       Public Sub Main()
          Dim tasks As New List(Of Task)
          Console.WriteLine("The current culture is {0}", 
                            Thread.CurrentThread.CurrentCulture.Name)
          Thread.CurrentThread.CurrentCulture = New CultureInfo("pt-BR")
          ' Change the current culture to Portuguese (Brazil).
          Console.WriteLine("Current culture changed to {0}",
                            Thread.CurrentThread.CurrentCulture.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.CurrentCulture.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 참조하세요.

  • GetUserDefaultLocaleNameWindows 함수를 호출하거나 uloc_getDefault ICU에서함수를 호출합니다. 이 함수는 현재 setlocale Unix와 같은 시스템에서 범주 를 가진 POSIX 함수를 LC_MESSAGES 호출합니다.

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

스레드의 문화권이 결정되는 방법에 대한 자세한 내용은 참조 페이지의 "문화권 및 스레드" 섹션을 CultureInfo 참조하세요.

현재 문화권 얻기

CultureInfo.CurrentCulture속성은 스레드별 설정입니다. 즉, 각 스레드는 고유한 문화권을 가질 수 있습니다. 다음 예제와 같이 속성 값을 검색하여 현재 스레드의 CultureInfo.CurrentCulture 문화권을 얻습니다.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo culture = CultureInfo.CurrentCulture;
      Console.WriteLine("The current culture is {0} [{1}]",
                        culture.NativeName, culture.Name);
   }
}
// The example displays output like the following:
//       The current culture is English (United States) [en-US]
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim culture As CultureInfo = CultureInfo.CurrentCulture
      Console.WriteLine("The current culture is {0} [{1}]",
                        culture.NativeName, culture.Name)
   End Sub
End Module
' The example displays output like the following:
'     The current culture is English (United States) [en-US]

CurrentCulture 속성을 명시적으로 설정

기존 스레드에서 사용하는 문화권을 변경하려면 속성을 새 CultureInfo.CurrentCulture 문화권으로 설정합니다. 이러한 방식으로 변경 하는 스레드의 문화권을 명시적으로 변경 하는 경우 스레드가 애플리케이션 도메인 경계를 넘나들 경우 유지 합니다. 다음 예제에서는 현재 스레드 문화권이 네덜란드어(네덜란드)로 변경됩니다. 현재 스레드가 애플리케이션 도메인 경계를 교차 하는 경우 현재 문화권 계속 변경 된 보여 줍니다.

using System;
using System.Globalization;
using System.Threading;

public class Info : MarshalByRefObject
{
   public void ShowCurrentCulture()
   {
      Console.WriteLine("Culture of {0} in application domain {1}: {2}",
                        Thread.CurrentThread.Name,
                        AppDomain.CurrentDomain.FriendlyName,
                        CultureInfo.CurrentCulture.Name);
   }
}

public class Example
{
   public static void Main()
   {
      Info inf = new Info();
      // Set the current culture to Dutch (Netherlands).
      Thread.CurrentThread.Name = "MainThread";
      CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("nl-NL");
      inf.ShowCurrentCulture();

      // Create a new application domain.
       AppDomain ad = AppDomain.CreateDomain("Domain2");
       Info inf2 = (Info) ad.CreateInstanceAndUnwrap(typeof(Info).Assembly.FullName, "Info");
       inf2.ShowCurrentCulture();
   }
}
// The example displays the following output:
//       Culture of MainThread in application domain ChangeCulture1.exe: nl-NL
//       Culture of MainThread in application domain Domain2: nl-NL
Imports System.Globalization
Imports System.Threading

Public Class Info : Inherits MarshalByRefObject
   Public Sub ShowCurrentCulture()
      Console.WriteLine("Culture of {0} in application domain {1}: {2}",
                        Thread.CurrentThread.Name,
                        AppDomain.CurrentDomain.FriendlyName,
                        CultureInfo.CurrentCulture.Name)
   End Sub
End Class

Module Example
   Public Sub Main()
      Dim inf As New Info()
      ' Set the current culture to Dutch (Netherlands).
      Thread.CurrentThread.Name = "MainThread"
      CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("nl-NL")
      inf.ShowCurrentCulture()
      
      ' Create a new application domain.
       Dim ad As AppDomain = AppDomain.CreateDomain("Domain2")
       Dim inf2 As Info = CType(ad.CreateInstanceAndUnwrap(GetType(Info).Assembly.FullName, "Info"),
                          Info)  
       inf2.ShowCurrentCulture()                       
   End Sub
End Module
' This example displays the following output:
'       Culture of MainThread in application domain Example.exe: nl-NL
'       Culture of MainThread in application domain Domain2: nl-NL

참고

사용 하 여 문화권을 변경 합니다 속성 값 집합을 사용 하 여 CultureInfo.CurrentCulture 권한이 필요 SecurityPermission ControlThread 합니다. 스레드를 조작은 스레드와 연결 된 보안 상태로 인해 위험 합니다. 따라서 이 권한은 신뢰할 수 있는 코드에만 부여된 다음 필요한 경우에만 부여해야 합니다. 세미 트러스트된 코드에서는 스레드 문화권 을 변경할 수 없습니다.

.NET Framework 4부터 현재 스레드 문화권은 특정 문화권(예: 프랑스어(캐나다)) 또는 중립 문화권(예: 프랑스어)으로 명시적으로 변경할 수 있습니다. CultureInfo개체가 중립 문화권인 경우 CultureInfo , , , 및 와 같은 속성 Calendar CompareInfo DateTimeFormat NumberFormat TextInfo 값은 중립 문화권과 연결된 특정 문화권에 반영됩니다. 예를 들어 영어 중립 문화권의 주요 문화권은 영어(미국)입니다. 독일 문화권의 주요 문화권은 독일어(독일)입니다. 다음 예제에서는 현재 문화권이 특정 문화권, 프랑스어(캐나다) 및 중립 문화권 프랑스어로 설정된 경우 서식 지정의 차이를 보여 줍니다.

using System;
using System.Globalization;
using System.Threading;

public class Example
{
   public static void Main()
   {
      double value = 1634.92;
      CultureInfo.CurrentCulture = new CultureInfo("fr-CA");
      Console.WriteLine("Current Culture: {0}",
                        CultureInfo.CurrentCulture.Name);
      Console.WriteLine("{0:C2}\n", value);

      Thread.CurrentThread.CurrentCulture = new CultureInfo("fr");
      Console.WriteLine("Current Culture: {0}",
                        CultureInfo.CurrentCulture.Name);
      Console.WriteLine("{0:C2}", value);
   }
}
// The example displays the following output:
//       Current Culture: fr-CA
//       1 634,92 $
//
//       Current Culture: fr
//       1 634,92 €
Imports System.Globalization
Imports System.Threading

Module Example
   Public Sub Main()
      Dim value As Double = 1634.92
      CultureInfo.CurrentCulture = New CultureInfo("fr-CA")
      Console.WriteLine("Current Culture: {0}", 
                        CultureInfo.CurrentCulture.Name)
      Console.WriteLine("{0:C2}", value)
      Console.WriteLine()
      
      Thread.CurrentThread.CurrentCulture = New CultureInfo("fr")
      Console.WriteLine("Current Culture: {0}", 
                        CultureInfo.CurrentCulture.Name)
      Console.WriteLine("{0:C2}", value)
   End Sub
End Module
' The example displays the following output:
'       Current Culture: fr-CA
'       1 634,92 $
'       
'       Current Culture: fr
'       1 634,92 €

사용할 수도 있습니다는 CultureInfo.CurrentCulture 와 함께 속성을 HttpRequest.UserLanguages 속성을 설정를 CurrentCulture 다음 예제와 같이 사용자에 게 ASP.NET 애플리케이션의 속성의 기본 문화권.

CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.UserLanguages[0]);
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.UserLanguages(0))

현재 문화권 및 사용자 재정의

Windows 사용하면 사용자가 제어판 국가 및 언어 옵션을 사용하여 개체 및 관련 개체의 표준 속성 값을 재정의할 CultureInfo있습니다. CultureInfo반환 하는 개체는 속성 다음과 같은 경우에 CurrentCulture 이러한 사용자 재정의 반영 합니다.

  • 현재 스레드 문화권이 Windows 함수에 의해 암시적으로 설정된 경우 GetUserDefaultLocaleName

  • 속성에서 정의한 현재 스레드 문화권이 DefaultThreadCurrentCulture 현재 Windows 시스템 문화권에 해당하는 경우

  • 현재 스레드 문화권이 메서드에서 반환된 문화권으로 명시적으로 설정되어 CreateSpecificCulture 있고 해당 문화권이 현재 Windows 시스템 문화권에 해당하는 경우

  • 현재 스레드 문화권이 생성자에 의해 인스턴스화된 문화권으로 명시적으로 설정되어 CultureInfo(String) 있고 해당 문화권이 현재 Windows 시스템 문화권에 해당하는 경우

일부 경우에 특히 서버 애플리케이션에 대 한 현재 문화권의 설정는 CultureInfo 사용자 재정의 반영 하는 개체를 적절 하지 않을 합니다. 대신 CultureInfo 다음과 같은 방법으로 사용자 재정의를 반영하지 않는 개체로 현재 문화권 를 설정할 수 있습니다.

현재 문화권 및 UWP 앱

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

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

적용 대상

추가 정보