CultureInfo.DefaultThreadCurrentUICulture Свойство

Определение

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

public:
 static property System::Globalization::CultureInfo ^ DefaultThreadCurrentUICulture { System::Globalization::CultureInfo ^ get(); void set(System::Globalization::CultureInfo ^ value); };
public static System.Globalization.CultureInfo DefaultThreadCurrentUICulture { get; set; }
public static System.Globalization.CultureInfo? DefaultThreadCurrentUICulture { get; set; }
member this.DefaultThreadCurrentUICulture : System.Globalization.CultureInfo with get, set
Public Shared Property DefaultThreadCurrentUICulture As CultureInfo

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

CultureInfo

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

Исключения

В операции задания значение свойства Name является недопустимым.

Примеры

В следующем примере показано поведение платформа .NET Framework по умолчанию при определении текущего языка и региональных параметров нового потока. В нем используются ресурсы английского и русского языка. Следующий текстовый файл с именем GreetingStrings.txt содержит ресурсы английского языка:

greeting =Hello again!
newGreeting=Hello!

Он компилируется в двоичный ФАЙЛ RESOURCES с именем GreetingStrings.resources с помощью генератора файлов ресурсов с помощью следующей команды.

resgen greetingstrings.txt

Следующий текстовый файл с именем GreetingStrings.ru-RU.txt содержит ресурсы русского языка:

greeting=Еще раз привет!
newGreeting=Привет!

Он компилируется в двоичный ФАЙЛ RESOURCES с именем GreetingStrings.ru-RU.resources с помощью генератора файлов ресурсов с помощью следующей команды.

resgen greetingstrings.ru-RU.txt

Код приложения, показанный ниже, находится в файле с именем Example1.vb или Example1.cs. Он компилируется в исполняемый файл с помощью следующей команды для компилятора Visual Basic:

vbc Example1.vb /resource:GreetingStrings.resources

Для компилятора C# команда аналогична:

csc /resource:GreetingStrings.resources Example1.cs

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

>al /embed:greetingstrings.ru-RU.resources /c:ru-RU /template:example1.exe /out:ru-RU\Example1.resources.dll

При запуске в примере задается текущая культура и текущая культура пользовательского интерфейса для российского языка (Россия) во всех системах, за исключением тех, на которых системный язык по умолчанию уже является российским (Россия). Если системный язык по умолчанию уже русский (Россия), код задает текущую культуру и текущий язык и региональные параметры пользовательского интерфейса на английский (США). Затем он вызывает подпрограмму ShowGreeting , которая отображает простую строку при первом вызове и немного другую строку при последующих вызовах метода. Затем создается новый поток, который также выполняет подпрограмму ShowGreeting .

using System;
using System.Globalization;
using System.Reflection;
using System.Resources;
using System.Threading;

[assembly:NeutralResourcesLanguageAttribute("en-US")]

public class Example
{
   private static int nGreetings = 0;
   private static ResourceManager rm;

   public static void Main()
   {
      AppDomain domain = AppDomain.CurrentDomain;
      rm = new ResourceManager("GreetingStrings",
                               typeof(Example).Assembly);

      CultureInfo culture = null;
      if (Thread.CurrentThread.CurrentUICulture.Name == "ru-RU")
         culture = CultureInfo.CreateSpecificCulture("en-US");
      else
         culture = CultureInfo.CreateSpecificCulture("ru-RU");

      Thread.CurrentThread.CurrentCulture = culture;
      Thread.CurrentThread.CurrentUICulture = culture;

      ShowGreeting();
      Thread.Sleep(1000);

      Thread workerThread = new Thread(Example.ShowGreeting);
      workerThread.Start();
   }

   private static void ShowGreeting()
   {
      string greeting = nGreetings == 0 ? rm.GetString("newGreeting") :
                                          rm.GetString("greeting");
      nGreetings++;
      Console.WriteLine("{0}", greeting);
   }
}
// The example displays the following output:
//       Привет!
//       Hello again!
Imports System.Globalization
Imports System.Reflection
Imports System.Resources
Imports System.Threading

<Assembly:NeutralResourcesLanguageAttribute("en-US")>

Public Class Example
   Private Shared nGreetings As Integer = 0
   Private Shared rm As ResourceManager

   Public Shared Sub Main()
      Dim domain As AppDomain = AppDomain.CurrentDomain
      rm = New ResourceManager("GreetingStrings", 
                               GetType(Example).Assembly)
                  
      Dim culture As CultureInfo = Nothing
      If Thread.CurrentThread.CurrentUICulture.Name = "ru-RU" Then
         culture = CultureInfo.CreateSpecificCulture("en-US")
      Else
         culture = CultureInfo.CreateSpecificCulture("ru-RU")
      End If   
      Thread.CurrentThread.CurrentCulture = culture
      Thread.CurrentThread.CurrentUICulture = culture

      ShowGreeting()
      Thread.Sleep(1000)

      Dim workerThread As New Thread(AddressOf Example.ShowGreeting)
      workerThread.Start()
   End Sub
   
   Private Shared Sub ShowGreeting()
      Dim greeting As String = CStr(IIf(nGreetings = 0, 
                                        rm.GetString("newGreeting"),
                                        rm.GetString("greeting")))
      nGreetings += 1
      Console.WriteLine("{0}", greeting)   
   End Sub
End Class
' The example displays the following output:
'       Привет!
'       Hello again!

Как показано в выходных данных из примера, при запуске примера на компьютере, системный язык и региональные параметры которых — английский (США), основной поток отображает начальную строку на русском языке. Тем не менее, поскольку язык и региональные параметры рабочего потока являются производными от текущего Windows системного языка и региональных параметров, а не текущего языка и региональных параметров приложения, рабочий поток отображает свою строку на английском языке.

В следующем примере используются DefaultThreadCurrentCulture свойства и параметры для определения текущего языка и DefaultThreadCurrentUICulture региональных параметров и текущего языка пользовательского интерфейса нового потока приложения.

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

При запуске в примере задается текущая культура и текущая культура пользовательского интерфейса для российского языка (Россия) во всех системах, за исключением тех, на которых системный язык по умолчанию уже является российским (Россия). Если системный язык по умолчанию уже русский (Россия), он задает текущую культуру и текущий язык и региональные параметры пользовательского интерфейса на английский (США). Затем он вызывает подпрограмму ShowGreeting , которая отображает простую строку при первом вызове и немного другую строку при последующих вызовах метода. Затем создается новый поток, который также выполняет подпрограмму ShowGreeting .

using System;
using System.Globalization;
using System.Reflection;
using System.Resources;
using System.Threading;

[assembly:NeutralResourcesLanguageAttribute("en-US")]

public class Example
{
   private static int nGreetings = 0;
   private static ResourceManager rm;

   public static void Main()
   {
      AppDomain domain = AppDomain.CurrentDomain;
      rm = new ResourceManager("GreetingStrings",
                               typeof(Example).Assembly);

      CultureInfo culture = null;
      if (Thread.CurrentThread.CurrentUICulture.Name == "ru-RU")
         culture = CultureInfo.CreateSpecificCulture("en-US");
      else
         culture = CultureInfo.CreateSpecificCulture("ru-RU");

      CultureInfo.DefaultThreadCurrentCulture = culture;
      CultureInfo.DefaultThreadCurrentUICulture = culture;

      Thread.CurrentThread.CurrentCulture = culture;
      Thread.CurrentThread.CurrentUICulture = culture;

      ShowGreeting();
      Thread.Sleep(1000);

      Thread workerThread = new Thread(Example.ShowGreeting);
      workerThread.Start();
   }

   private static void ShowGreeting()
   {
      string greeting = nGreetings == 0 ? rm.GetString("newGreeting") :
                                          rm.GetString("greeting");
      nGreetings++;
      Console.WriteLine("{0}", greeting);
   }
}
// The example displays the following output:
//       Привет!
//       Еще раз привет!
Imports System.Globalization
Imports System.Reflection
Imports System.Resources
Imports System.Threading

<Assembly:NeutralResourcesLanguageAttribute("en-US")>

Public Class Example
   Private Shared nGreetings As Integer = 0
   Private Shared rm As ResourceManager

   Public Shared Sub Main()
      Dim domain As AppDomain = AppDomain.CurrentDomain
      rm = New ResourceManager("GreetingStrings", 
                               GetType(Example).Assembly)
                  
      Dim culture As CultureInfo = Nothing
      If Thread.CurrentThread.CurrentUICulture.Name = "ru-RU" Then
         culture = CultureInfo.CreateSpecificCulture("en-US")
      Else
         culture = CultureInfo.CreateSpecificCulture("ru-RU")
      End If   
      CultureInfo.DefaultThreadCurrentCulture = culture
      CultureInfo.DefaultThreadCurrentUICulture = culture
       
      Thread.CurrentThread.CurrentCulture = culture
      Thread.CurrentThread.CurrentUICulture = culture

      ShowGreeting()
      Thread.Sleep(1000)

      Dim workerThread As New Thread(AddressOf Example.ShowGreeting)
      workerThread.Start()
   End Sub
   
   Private Shared Sub ShowGreeting()
      Dim greeting As String = CStr(IIf(nGreetings = 0, 
                                        rm.GetString("newGreeting"),
                                        rm.GetString("greeting")))
      nGreetings += 1
      Console.WriteLine("{0}", greeting)   
   End Sub
End Class
' The example displays the following output:
'       Привет!
'       Еще раз привет!

Как показано в выходных данных из примера, при выполнении примера на компьютере, системный язык и региональные параметры которых — английский (США), основной поток и рабочий поток отображают строки на русском языке.

Комментарии

В платформа .NET Framework 4 и предыдущих версиях по умолчанию язык и региональные параметры пользовательского интерфейса для всех потоков задаются Windows системным языком и региональными параметрами. Для приложений, текущие язык и региональные параметры пользовательского интерфейса которых отличаются от системного языка и региональных параметров по умолчанию, такое поведение часто нежелательно. В платформа .NET Framework 4.5 DefaultThreadCurrentUICulture свойство позволяет определить язык и региональные параметры пользовательского интерфейса по умолчанию для всех потоков в домене приложения.

Важно!

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

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

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

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

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