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-файл с именем Гритингстрингс. Resources с помощью генератора файлов ресурсов , используя следующую команду.

resgen greetingstrings.txt

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

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

Он компилируется в файл binary. 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 странице справки.

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

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