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.

Примеры

В следующем примере показано, как изменить CurrentCulture и для CurrentUICulture текущего потока.

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 thread 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 thread 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.CurrentCulture свойства является более производительным аналогом извлечения CultureInfo объекта, возвращаемого Thread.CurrentThread.CurrentCulture свойством.

Примечание

в платформа .NET Framework 4.5.2 и более ранних версиях CurrentCulture свойство доступно только для чтения. Это значит, что вы можете получить значение свойства, но не можете его задать. Чтобы изменить текущий язык и региональные параметры, необходимо назначить CultureInfo свойству объект, представляющий новый язык и региональные параметры Thread.CurrentThread.CurrentCulture . начиная с платформа .NET Framework 4,6, CurrentCulture свойство доступно для чтения и записи; можно задавать и извлекать значение свойства. Если задать значение свойства для CultureInfo объекта, представляющего новый язык и региональные параметры, значение Thread.CurrentThread.CurrentCulture свойства также изменится.

Содержание

Определение языка и региональных параметров потока
Получение текущего языка и региональных параметров
Явное задание свойства CurrentCulture
Текущий язык и региональные параметры и пользовательские переопределения
язык и региональные параметры и приложения Windows\

Определение языка и региональных параметров потока

При запуске потока его язык и региональные параметры изначально определяются следующим образом:

  • При извлечении языка и региональных параметров, заданных DefaultThreadCurrentCulture свойством в домене приложения, в котором выполняется поток, если значение свойства не равно null .

  • если поток является потоком пула потоков, выполняющего асинхронную операцию на основе задач, а приложение предназначено для платформа .NET Framework 4,6 или более поздней версии платформа .NET Framework, его язык и региональные параметры определяются культурой вызывающего потока. Следующий пример изменяет текущий язык и региональные параметры на португальский (Бразилия) и запускает шесть задач, каждый из которых отображает идентификатор своего потока, идентификатор задачи и текущий язык и региональные параметры. Каждая из задач (и потоков) унаследовала культуру вызывающего потока.

    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 статьи.

  • вызывая GetUserDefaultLocaleName функцию для Windows или uloc_getDefault функцию из ICU, которая в настоящее время вызывает функцию POSIX setlocale с категорией LC_MESSAGES , в системах, подобных Unix.

Обратите внимание, что при задании определенного языка и региональных параметров, отличающегося от установленной системой языка и региональных параметров пользователя, и приложение запускает несколько потоков, текущий язык и региональные параметры этих потоков будут представлять собой культуру, возвращаемую 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]

Также можно получить значение языка и региональных параметров текущего потока из Thread.CurrentThread Свойства.

Явное задание свойства CurrentCulture

с платформа .NET Framework 4,6, чтобы изменить язык и региональные параметры, используемые существующим потоком, необходимо присвоить 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 свойством, отражает переопределяемые пользователем переопределения в следующих случаях:

  • если язык и региональные параметры текущего потока задаются неявно GetUserDefaultLocaleName функцией Windows.

  • если язык и региональные параметры текущего потока, определенные DefaultThreadCurrentCulture свойством, соответствуют текущему языку и региональным параметрам системы Windows.

  • если язык и региональные параметры текущего потока заданы явно для языка и региональных параметров, возвращаемых CreateSpecificCulture методом, а этот язык и региональные параметры соответствуют текущему языку и региональным параметрам системы Windows.

  • если язык и региональные параметры текущего потока заданы явно для языка и региональных параметров CultureInfo(String) , созданных конструктором, а этот язык и региональные параметры соответствуют текущей культуре системы Windows.

В некоторых случаях, особенно для серверных приложений, установка текущего языка и региональных параметров для CultureInfo объекта, отражающего переопределенные пользователем переопределения, может быть нежелательной. Вместо этого можно задать текущий язык и региональные параметры текущего потока для CultureInfo объекта, который не отражает переопределяемые пользователем переопределения следующими способами.

  • Путем вызова CultureInfo(String, Boolean) конструктора со значением false для useUserOverride аргумента.

  • Путем вызова GetCultureInfo метода, который возвращает кэшированный объект, предназначенный только для чтения CultureInfo .

Текущие язык и региональные параметры и приложения UWP

в приложениях универсальная платформа Windows (UWP) CurrentCulture свойство доступно для чтения и записи так же, как и в платформа .NET Framework и в приложениях .net Core. его можно использовать для получения и установки текущего языка и региональных параметров. Однако приложения UWP не различают текущий язык и региональные параметры пользовательского интерфейса. CurrentCultureСвойства и CurrentUICulture сопоставляются с первым значением в Windows. Коллекция ApplicationModel. Resources. Core. ResourceManager. Дефаултконтекст. Languages .

в платформа .NET Framework и приложениях .net Core текущий язык и региональные параметры — это параметр для каждого потока, а CurrentCulture свойство отражает язык и региональные параметры текущего потока. В приложениях UWP текущий язык и региональные параметры сопоставлены с Windows. Свойство ApplicationModel. Resources. Core. ResourceManager. Дефаултконтекст. Languages является глобальным параметром. Установка CurrentCulture свойства изменяет язык и региональные параметры для всего приложения; язык и региональные параметры не могут устанавливаться отдельно для каждого потока.

Применяется к

См. также раздел