CultureInfo.CurrentUICulture Свойство

Определение

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

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; }
static member CurrentUICulture : System.Globalization.CultureInfo with get, set
static member CurrentUICulture : System.Globalization.CultureInfo
Public Shared Property CurrentUICulture As CultureInfo
Public Shared ReadOnly Property CurrentUICulture As CultureInfo

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

Язык и региональные параметры, используемые Resource Manager для поиска ресурсов, зависящих от языка и региональных параметров во время выполнения.

Исключения

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

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

Примеры

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

using System;
using System.Globalization;

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 Example2
   Public Sub Run()
      ' 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.

Комментарии

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

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

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

    using System;
    using System.Collections.Generic;
    using System.Globalization;
    using System.Runtime.Versioning;
    using System.Threading;
    using System.Threading.Tasks;
    
    public class Example
    {
        public static async Task Main()
        {
            var tasks = new List<Task>();
            Console.WriteLine($"The current UI culture is {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 {Thread.CurrentThread.CurrentUICulture.Name}");
            Console.WriteLine($"Application thread is thread {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 {Task.CurrentId} on thread {Thread.CurrentThread.ManagedThreadId} is {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.Globalization
    Imports System.Threading
    
    Module Example1
        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 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 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 UI culture is en-US
    '     Current UI 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
    

    Дополнительные сведения см. в разделе "Культура и асинхронные операции на основе заданий".

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

Чтобы изменить культуру пользовательского интерфейса, используемую потоком, задайте для свойства Thread.CurrentUICulture новую культуру. Если вы явно изменяете культуру пользовательского интерфейса потока таким образом, это изменение сохраняется, если поток выходит за пределы домена приложения.

Замечание

Если задать значение свойства в объекте CultureInfo, представляющем новую культуру, то значение свойства Thread.CurrentThread.CurrentCulture также изменится.

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

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

using System;
using System.Globalization;

public class Example2
{
    public static void Main()
    {
        CultureInfo culture = CultureInfo.CurrentUICulture;
        Console.WriteLine($"The current UI culture is {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 Example3
    Public Sub Main()
        Dim culture As CultureInfo = CultureInfo.CurrentUICulture
        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.

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

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

using System;
using System.Globalization;

public class Example1
{
    public static void Main()
    {
        Console.WriteLine($"The current UI culture: {CultureInfo.CurrentUICulture.Name}");

        CultureInfo.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr-FR");
        Console.WriteLine($"The current UI culture: {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

Module Example2
    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, общий язык выполнения вызывает функцию Windows GetUserDefaultUILanguage для установки текущей культуры пользовательского интерфейса. GetUserDefaultUILanguage возвращает культуру пользовательского интерфейса по умолчанию, заданную пользователем. Если пользователь не установил язык пользовательского интерфейса по умолчанию, возвращается культура, первоначально установленная в системе.

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

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

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

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

Предостережение

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

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

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