Данная статья переведена с помощью средств машинного перевода. Чтобы просмотреть ее на английском языке, установите флажок Английский. Вы также можете просматривать английский текст во всплывающем окне, наводя указатель мыши на переведенный текст.
Перевод
Английский

Свойство CultureInfo.CurrentCulture

 

Опубликовано: Октябрь 2016

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

Пространство имен:   System.Globalization
Сборка:  mscorlib (в mscorlib.dll)

public static CultureInfo CurrentCulture { get; set; }

Значение свойства

Type: System.Globalization.CultureInfo

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

Exception Condition
ArgumentNullException

Для свойства задано значение null.

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

Текущая культура является свойством выполняющегося потока, возвращаемое статическим Thread.CurrentThread свойство. Значение CultureInfo.CurrentCulture соответствует свойству значение Thread.CurrentCulture Свойства. Получение значения CultureInfo.CurrentCulture свойство является аналогом извлечение CultureInfo объект, возвращаемый Thread.CurrentThread.CurrentCulture свойство. Начиная с .NET Framework 4.6, если значением CultureInfo.CurrentCulture также изменяется язык и региональные параметры текущего потока.

System_CAPS_noteПримечание

В .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 void 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);
                                } ));                     
    
          Task.WaitAll(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
    

    Дополнительные сведения см. в разделе «Язык и региональные параметры и асинхронные операции на основе задач» в CultureInfo разделе.

  • Путем вызова Windows GetUserDefaultLocaleName функции.

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

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

Начиная с .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
System_CAPS_noteПримечание

Изменение языка и региональных параметров с помощью 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 €

Можно также использовать CultureInfo.CurrentCulture свойство вместе с HttpRequest.UserLanguages свойство, чтобы задать CurrentCulture Свойства приложения ASP.NET для пользователя предпочтительного языка и региональных параметров, как показано в следующем примере.

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

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

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

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

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

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

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

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

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

В приложениях Windows CurrentCulture свойство доступно только для чтения. Текущий язык и региональные параметры можно задать с помощью Windows ResourceContext.Languages свойство. В следующем примере используется его для изменения текущего языка и региональных параметров приложения либо английский (США) или, если текущий язык и региональные параметры уже является английский (США), французский (Франция). Значение CurrentCulture и CurrentUICulture Свойства отображаются на TextBlock элемент управления с именем block. Как показывает вывод примера, текущего языка и региональных параметров изменяется, когда ResourceContext.Languages изменения свойств.


ResourceContext context = ResourceManager.Current.DefaultContext;
var list = new List<String>();
if (CultureInfo.CurrentCulture.Name == "en-US")
   list.Add("fr-FR");
else
   list.Add("en-US");

context.Languages = list;
block.Text += String.Format("\nThe current culture is {0}\n",
                            CultureInfo.CurrentCulture);
block.Text += String.Format("The current culture UI is {0}\n",
                            CultureInfo.CurrentUICulture);
// The example displays output like the following if run on a system
// whose current culture is English (United States):
// The current culture is fr-FR
// The current UI culture is fr-FR   


Dim context As ResourceContext = ResourceManager.Current.DefaultContext
Dim list As New List(Of String)()
If CultureInfo.CurrentCulture.Name = "en-US" Then
   list.Add("fr-FR")
Else
   list.Add("en-US")
End If
context.Languages = list
block.Text += String.Format("{1}The current culture is {0}{1}",
                            CultureInfo.CurrentCulture, vbCrLf)
block.Text += String.Format("The current culture UI is {0}\n",
                            CultureInfo.CurrentUICulture)
' The example displays output Like the following if run on a system
' whose current culture Is English (United States):
'    The current culture Is fr-FR
'    The current UI culture Is fr-FR   

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

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.

SecurityPermission

for setting the current culture. Associated enumeration: F:System.Security.Permissions.SecurityPermissionFlag.ControlThread

Универсальная платформа Windows
Доступно с 8
.NET Framework
Доступно с 1.1
Переносимая библиотека классов
Поддерживается в: переносимые платформы .NET
Silverlight
Доступно с 2.0
Windows Phone Silverlight
Доступно с 7.0
Windows Phone
Доступно с 8.1
Вернуться в начало
Показ: