CultureInfo.CurrentUICulture CultureInfo.CurrentUICulture CultureInfo.CurrentUICulture CultureInfo.CurrentUICulture Property

Определение

Возвращает или задает объект CultureInfo, представляющий текущий язык и региональные параметры пользовательского интерфейса, используемые диспетчером ресурсов для поиска ресурсов, связанных с конкретным языком и региональными параметрами, во время выполнения.Gets or sets the CultureInfo object that represents the current user interface culture used by the Resource Manager to look up culture-specific resources at run time.

public:
 static property System::Globalization::CultureInfo ^ CurrentUICulture { System::Globalization::CultureInfo ^ get(); };
public static System.Globalization.CultureInfo CurrentUICulture { get; }
member this.CurrentUICulture : System.Globalization.CultureInfo
Public Shared ReadOnly Property CurrentUICulture As CultureInfo

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

Язык и региональные параметры, используемые диспетчером ресурсов для поиска ресурсов, связанных с языком и региональными параметрами, во время выполнения.The culture used by the Resource Manager to look up culture-specific resources at run time.

Исключения

Для свойства задано значение null.The property is set to null.

Свойству присвоено имя языка и региональных параметров, которое не может использоваться для нахождения файла ресурсов.The property is set to a culture name that cannot be used to locate a resource file. Имена файлов ресурсов могут содержать только буквы, цифры, дефисы или символы подчеркивания.Resource filenames can include only letters, numbers, hyphens, or underscores.

Примеры

В следующем примере кода показано, как изменить CurrentCulture и CurrentUICulture для текущего потока.The following code example demonstrates how to change the CurrentCulture and CurrentUICulture of the current thread.

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.

Комментарии

Текущий язык и региональные параметры пользовательского интерфейса — это свойство для каждого потока.The current UI culture is a per-thread property. То есть каждый поток имеет собственный текущий язык и региональные параметры пользовательского интерфейса.That is, each thread has its own current UI culture. Это свойство эквивалентно извлечению или, начиная с .NET Framework 4.6.NET Framework 4.6, CultureInfo устанавливая объект, присвоенный System.Threading.Thread.CurrentThread.CurrentUICulture свойству.This property is equivalent to retrieving or, starting with the .NET Framework 4.6.NET Framework 4.6, setting the CultureInfo object assigned to the System.Threading.Thread.CurrentThread.CurrentUICulture property. При запуске потока его культура пользовательского интерфейса изначально определяется следующим образом:When a thread is started, its UI culture is initially determined as follows:

  • При извлечении языка и региональных параметров, заданных DefaultThreadCurrentUICulture свойством в домене приложения, в котором выполняется поток, если значение свойства не nullравно.By retrieving the culture that is specified by the DefaultThreadCurrentUICulture property in the application domain in which the thread is executing, if the property value is not null.

  • Если поток является потоком пула потоков, который выполняет асинхронную операцию на основе задач, а приложение предназначено для .NET Framework 4.6.NET Framework 4.6 или более поздней версии .NET Framework, его культура пользовательского интерфейса определяется культурой пользовательского интерфейса вызывающего потока.If the thread is a thread pool thread that is executing a task-based asynchronous operation and the app targets the .NET Framework 4.6.NET Framework 4.6 or a later version of the .NET Framework, its UI culture is determined by the UI culture of the calling thread. Следующий пример изменяет текущий язык и региональные параметры пользовательского интерфейса на португальский (Бразилия) и запускает шесть задач, каждый из которых отображает идентификатор своего потока, идентификатор задачи и текущий язык и региональные параметры пользовательского интерфейса.The following example changes the current UI culture to Portuguese (Brazil) and launches six tasks, each of which displays its thread ID, its task ID, and its current UI culture. Каждая из задач (и потоков) унаследовала культуру пользовательского интерфейса вызывающего потока.Each of the tasks (and the threads) has inherited the UI culture of the calling thread.

    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 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 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 "Культура и асинхронные операции на основе задач" статьи.For more information, see the "Culture and task-based asynchronous operations" section in the CultureInfo topic.

  • Путем вызова функции Windows GetUserDefaultUILanguage .By calling the Windows GetUserDefaultUILanguage function.

Примечание

.NET Compact Framework.NET Compact Framework ВсвойствоCurrentUICulture доступно только для чтения.In the .NET Compact Framework.NET Compact Framework, the CurrentUICulture property is read-only. Текущий язык и региональные параметры пользовательского интерфейса определяются региональными параметрами системы и не могут быть изменены программным способом.The current UI culture is determined by the system's regional settings and cannot be changed programmatically.

Начиная с .NET Framework 4.6.NET Framework 4.6, чтобы изменить язык и региональные параметры пользовательского интерфейса, используемые потоком, Thread.CurrentUICulture задайте для свойства новый язык и региональные параметры.Starting with the .NET Framework 4.6.NET Framework 4.6, to change the user interface culture used by a thread, set the Thread.CurrentUICulture property to the new culture. Если вы явно изменяете язык и региональные параметры пользовательского интерфейса потока таким образом, это изменение сохраняется, если поток пересекает границы домена приложения.If you explicitly change a thread's UI culture in this way, that change persists if the thread crosses application domain boundaries.

Примечание

В .NET Framework 4.5.2 и более ранних версиях CurrentUICulture свойство доступно только для чтения. Это значит, что вы можете получить значение свойства, но не можете его задать.In the .NET Framework 4.5.2 and earlier versions, the CurrentUICulture property is read-only; that is, you can retrieve the property value, but you cannot set it. Чтобы изменить текущий язык и региональные параметры пользовательского интерфейса, CultureInfo необходимо назначить Thread.CurrentThread.CurrentUICulture свойству объект, представляющий новый язык и региональные параметры пользовательского интерфейса.To change the current UI culture, you assign the CultureInfo object that represents the new UI culture to the Thread.CurrentThread.CurrentUICulture property. Начиная с .NET Framework 4.6.NET Framework 4.6 CultureInfo.CurrentUICulture , свойство доступно для чтения и записи; можно задавать и извлекать значение свойства.Starting with the .NET Framework 4.6.NET Framework 4.6, the CultureInfo.CurrentUICulture property is read-write; you can both set and retrieve the property's value. Если задать значение свойства для CultureInfo объекта, представляющего новый язык и региональные параметры, значение Thread.CurrentThread.CurrentCulture свойства также изменится.If you do set the property value to a CultureInfo object that represents a new culture, the value of the Thread.CurrentThread.CurrentCulture property also changes.

СодержаниеIn this section:

Получение текущего языка и региональных параметров пользовательского интерфейса Getting the Current UI Culture
Явное задание текущего языка и региональных параметров пользовательского интерфейса Explicitly Setting the Current UI Culture
Неявная установка текущего языка и региональных параметров пользовательского интерфейса Implicitly Setting the Current UI Culture
Вопросы безопасности Security Considerations
Текущий язык и региональные параметры пользовательского интерфейса и приложения WindowsThe Current UI Culture and Windows apps

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

CultureInfo.CurrentUICulture Свойство является параметром для каждого потока, то есть каждый поток может иметь собственный язык и региональные параметры пользовательского интерфейса.The CultureInfo.CurrentUICulture property is a per-thread setting; that is, each thread can have its own UI culture. Вы получаете язык и региональные параметры пользовательского интерфейса текущего потока, извлекая значение CultureInfo.CurrentUICulture свойства, как показано в следующем примере.You get the UI culture of the current thread by retrieving the value of the CultureInfo.CurrentUICulture property, as the following example illustrates.

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 свойства.You can also retrieve the value of the current thread's UI culture from the Thread.CurrentUICulture property.

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

Начиная с .NET Framework 4.6.NET Framework 4.6, можно изменить текущий язык и региональные параметры пользовательского интерфейса, CultureInfo назначив этому CultureInfo.CurrentUICulture свойству объект, представляющий новый язык и региональные параметры.Starting with the .NET Framework 4.6.NET Framework 4.6, you can change the current UI culture by assigning a CultureInfo object that represents the new culture to the CultureInfo.CurrentUICulture property. Для текущего языка и региональных параметров пользовательского интерфейса можно задать определенную культуру (например, EN-US или de-DE) или нейтральную культуру (например, EN или de).The current UI culture can be set to either a specific culture (such as en-US or de-DE) or to a neutral culture (such as en or de). В следующем примере текущий язык и региональные параметры пользовательского интерфейса устанавливаются в значение fr-FR или французский (Франция).The following example sets the current UI culture to fr-FR or French (France).

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 свойства потока объект, представляющий этот язык и региональные параметры.In a multithreaded application, you can explicitly set the UI culture of any thread by assigning a CultureInfo object that represents that culture to the thread's Thread.CurrentUICulture property. Если поток, язык и региональные параметры которого вы хотите задать, является текущим потоком, то для CultureInfo.CurrentUICulture свойства можно назначить новый язык и региональные параметры.If the thread whose culture you want to set is the current thread, you can assign the new culture to the CultureInfo.CurrentUICulture property. Если язык и региональные параметры пользовательского интерфейса для потока заданы явно, этот поток будет хранить те же региональные параметры даже в том случае, если он пересекает границы домена приложения и выполняет код в другом домене приложения.When the UI culture of a thread is set explicitly, that thread retains the same culture even if it crosses application domain boundaries and executes code in another application domain.

Неявная установка текущего языка и региональных параметров пользовательского интерфейсаImplicitly Setting the Current UI Culture

Когда сначала создается поток, включая основной поток приложения, по умолчанию его текущий язык и региональные параметры пользовательского интерфейса устанавливаются следующим образом:When a thread, including the main application thread, is first created, by default its current UI culture is set as follows:

  • С помощью языка и региональных параметров, DefaultThreadCurrentUICulture определенных свойством для текущего домена приложения, если значение свойства не nullравно.By using the culture defined by the DefaultThreadCurrentUICulture property for the current application domain if the property value is not null.

  • С использованием языка и региональных параметров по умолчанию для системы.By using the system's default culture. В системах, использующих операционную систему Windows, среда CLR вызывает функцию Windows GetUserDefaultUILanguage для установки текущего языка и региональных параметров пользовательского интерфейса.On systems that use the Windows operating system, the common language runtime calls the Windows GetUserDefaultUILanguage function to set the current UI culture. GetUserDefaultUILanguageВозвращает язык и региональные параметры пользовательского интерфейса по умолчанию, заданные пользователем.GetUserDefaultUILanguage returns the default UI culture set by the user. Если пользователь не установил язык пользовательского интерфейса по умолчанию, он возвращает язык и региональные параметры, установленные в системе изначально.If the user has not set a default UI language, it returns the culture originally installed on the system.

Если поток пересекает границы приложения и выполняет код в другом домене приложения, его язык и региональные параметры определяются так же, как и у вновь созданного потока.If the thread crosses application boundaries and executes code in another application domain, its culture is determined in the same way as that of a newly created thread.

Обратите внимание, что при задании определенного языка и региональных параметров пользовательского интерфейса, отличающегося от установленного системой языка и региональных параметров пользовательского интерфейса пользователя, и приложение запускает несколько потоков, текущий язык и региональные параметры пользовательского интерфейса для этих потоков будут являться культурой, возвращаемой GetUserDefaultUILanguageфункция, если не назначить язык и региональные параметры DefaultThreadCurrentUICulture свойству в домене приложения, в котором выполняется поток.Note that if you set a specific UI culture that is different from the system-installed UI culture or the user's preferred UI culture, and your application starts multiple threads, the current UI culture of those threads will be the culture returned by the GetUserDefaultUILanguage function, unless you assign a culture to the DefaultThreadCurrentUICulture property in the application domain in which the thread is executing.

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

Для изменения языка и региональных параметров текущего потока требуется SecurityPermission разрешение ControlThread с установленным значением.Changing the culture of the current thread requires a SecurityPermission permission with the ControlThread value set.

Внимание!

Управление потоками опасно из-за состояния безопасности, связанного с потоками.Manipulating threads is dangerous because of the security state associated with threads. Таким образом, это разрешение должно предоставляться только доверенному коду, а затем только по мере необходимости.Therefore, this permission should be given only to trustworthy code, and then only as necessary. Невозможно изменить культуру потока в частично доверяемом коде.You cannot change thread culture in semi-trusted code.

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

В приложениях CurrentUICulture универсальная платформа Windows (UWP) свойство доступно для чтения и записи так же, как и в .NET Framework и в приложениях .NET Core. его можно использовать для получения и установки текущего языка и региональных параметров.In Universal Windows Platform (UWP) apps, the CurrentUICulture property is read-write, just as it is in .NET Framework and .NET Core apps; you can use it both to get and to set the current culture. Однако приложения UWP не различают текущий язык и региональные параметры пользовательского интерфейса.However, UWP apps do not distinguish between the current culture and the current UI culture. Свойства CurrentCulture иCurrentUICulture сопоставляются с первым значением в коллекции Windows. ApplicationModel. Resources. Core. ResourceManager. дефаултконтекст. Languages .The CurrentCulture and CurrentUICulture properties map to the first value in the Windows.ApplicationModel.Resources.Core.ResourceManager.DefaultContext.Languages collection.

В .NET Framework и приложениях .NET Core текущий язык и региональные параметры пользовательского интерфейса являются параметром для каждого потока, CurrentUICulture а свойство отражает язык и региональные параметры пользовательского интерфейса только текущего потока.In .NET Framework and .NET Core apps, the current UI culture is a per-thread setting, and the CurrentUICulture property reflects the UI culture of the current thread only. В приложениях UWP текущий язык и региональные параметры сопоставляются со свойством Windows. ApplicationModel. Resources. Core. ResourceManager. дефаултконтекст. Languages , которое является глобальным параметром.In UWP apps, the current culture maps to the Windows.ApplicationModel.Resources.Core.ResourceManager.DefaultContext.Languages property, which is a global setting. CurrentCulture Установка свойства изменяет язык и региональные параметры для всего приложения; язык и региональные параметры не могут устанавливаться отдельно для каждого потока.Setting the CurrentCulture property changes the culture of the entire app; culture cannot be set on a per-thread basis.

Безопасность

SecurityPermission
для настройки текущего языка и региональных параметров пользовательского интерфейса.for setting the current UI culture. Связанное перечисление:ControlThreadAssociated enumeration: ControlThread

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

Дополнительно