CultureInfo.CurrentUICulture Свойство

Определение

Возвращает или задает объект 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; }
member this.CurrentUICulture : System.Globalization.CultureInfo with get, set
member this.CurrentUICulture : System.Globalization.CultureInfo
Public Shared Property CurrentUICulture As CultureInfo
Public Shared ReadOnly Property CurrentUICulture 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 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 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.

Комментарии

Текущий язык и региональные параметры пользовательского интерфейса — это свойство для каждого потока. То есть каждый поток имеет собственный язык и региональные параметры пользовательского интерфейса. Это свойство эквивалентно получению или, начиная с платформа .NET Framework 4.6, задание CultureInfo объекта, назначенного свойствуSystem.Threading.Thread.CurrentThread.CurrentUICulture. При запуске потока его язык и региональные параметры пользовательского интерфейса изначально определяются следующим образом:

  • Извлекая язык и региональные параметры, заданные свойством DefaultThreadCurrentUICulture в домене приложения, в котором выполняется поток, если значение свойства не 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 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.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 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 .

  • Вызывая функцию WindowsGetUserDefaultUILanguage.

Примечание

В .NET Compact Framework CurrentUICulture свойство доступно только для чтения. Текущий язык и региональные параметры пользовательского интерфейса определяются региональными параметрами системы и не могут быть изменены программным способом.

Начиная с платформа .NET Framework 4.6, чтобы изменить язык и региональные параметры пользовательского интерфейса, используемые потоком, задайте Thread.CurrentUICulture для свойства новый язык и региональные параметры. Если явно изменить язык и региональные параметры пользовательского интерфейса потока таким образом, это изменение сохраняется, если поток пересекает границы домена приложения.

Примечание

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

Содержание

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

Получение текущего языка и региональных параметров пользовательского интерфейса

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

using System;
using System.Globalization;

public class Example
{
   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 Example
   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]

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

Явное задание текущего языка и региональных параметров пользовательского интерфейса

Начиная с платформа .NET Framework 4.6, можно изменить текущий язык и региональные параметры пользовательского интерфейса, назначив CultureInfo объект, представляющий новый язык и региональные параметры свойствуCultureInfo.CurrentUICulture. Текущий язык и региональные параметры пользовательского интерфейса можно задать в качестве определенного языка и региональных параметров (например, en-US или de) или нейтрального языка и региональных параметров (например, en или de). В следующем примере для текущего языка и региональных параметров пользовательского интерфейса задается значение fr-FR или французский (Франция).

using System;
using System.Globalization;

public class Example
{
   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
Imports System.Threading

Module Example
   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 . Если поток, язык и региональные параметры которого требуется задать, является текущим потоком, можно назначить новому языку и региональным параметрам свойство CultureInfo.CurrentUICulture . Если язык и региональные параметры пользовательского интерфейса потока заданы явным образом, этот поток сохраняет тот же язык и региональные параметры, даже если он пересекает границы домена приложения и выполняет код в другом домене приложения.

Неявно задание текущего языка и региональных параметров пользовательского интерфейса

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

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

  • Используя язык и региональные параметры по умолчанию системы. В системах, использующих операционную систему Windows, среда CLR вызывает функцию Windows GetUserDefaultUILanguage для задания текущего языка и региональных параметров пользовательского интерфейса. GetUserDefaultUILanguage возвращает язык и региональные параметры пользовательского интерфейса по умолчанию, заданные пользователем. Если пользователь не установил язык пользовательского интерфейса по умолчанию, он возвращает язык и региональные параметры, изначально установленные в системе.

Если поток пересекает границы приложения и выполняет код в другом домене приложения, его язык и региональные параметры определяются таким же образом, как и у вновь созданного потока.

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

Вопросы безопасности

Для изменения языка и региональных параметров текущего потока требуется SecurityPermission разрешение с набором значений ControlThread .

Внимание!

Управление потоками опасно из-за состояния безопасности, связанного с потоками. Таким образом, это разрешение должно быть предоставлено только надежному коду, а затем только при необходимости. Нельзя изменить язык и региональные параметры потока в полунадежном коде.

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

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

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

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

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