CultureInfo.DefaultThreadCurrentUICulture Vlastnost

Definice

Získá nebo nastaví výchozí jazykovou verzi uživatelského rozhraní pro vlákna v aktuální doméně aplikace.

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

Hodnota vlastnosti

CultureInfo

Výchozí jazyková verze uživatelského rozhraní pro vlákna v aktuální doméně aplikace nebo pokud je aktuální jazyková verze uživatelského rozhraní systému výchozí jazykovou verzí uživatelského rozhraní vlákna null v doméně aplikace.

Výjimky

V operaci set je Name hodnota vlastnosti neplatná.

Příklady

Následující příklad ilustruje výchozí chování .NET Framework při definování aktuální jazykové verze nového vlákna. Používá prostředky pro angličtinu a ruštinu. Následující textový soubor s názvem GreetingStrings.txt obsahuje prostředky anglického jazyka:

greeting =Hello again!
newGreeting=Hello!

Pomocí následujícího příkazu se zkompiluje do binárního souboru .resources s názvem GreetingStrings.resources pomocí generátoru souborů prostředků.

resgen greetingstrings.txt

Následující textový soubor s názvem GreetingStrings.ru-RU.txt obsahuje prostředky ruštiny:

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

Pomocí následujícího příkazu se zkompiluje do binárního souboru .resources GreetingStrings.ru-RU.resources pomocí generátoru souborů prostředků.

resgen greetingstrings.ru-RU.txt

Kód aplikace, který je zobrazený níže, se nachází v souboru s názvem Example1.vb nebo Example1.cs. Je zkompilován do spustitelného souboru pomocí následujícího příkazu pro Visual Basic souborů:

vbc Example1.vb /resource:GreetingStrings.resources

V případě kompilátoru jazyka C# je příkaz podobný:

csc /resource:GreetingStrings.resources Example1.cs

Tím se vytvoří sestavení, které obsahuje spustitelný kód příkladu spolu s prostředky pro jeho záložní jazykovou verzi. Linker sestavení můžete použít také k vytvoření souboru prostředků pro jazykovou verzi ruštiny (Rusko) pomocí následujícího příkazu:

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

Při spuštění příklad nastaví aktuální jazykovou verzi a aktuální jazykovou verzi uživatelského rozhraní na ruštinu (Ruština) ve všech systémech kromě těch, ve kterých je výchozí systémová jazyková verze již ruština (Rusko). Pokud je výchozí systémová jazyková verze již ruština (Ruština), kód nastaví aktuální jazykovou verzi a aktuální jazykovou verzi uživatelského rozhraní na angličtinu (USA). Potom zavolá rutinu , která při prvním volání zobrazí jednoduchý řetězec a po dalších voláních ShowGreeting metody mírně jiný řetězec. Dále vytvoří nové vlákno, které také spustí ShowGreeting rutinu.

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!

Jak ukazuje výstup z příkladu, při spuštění příkladu v počítači, jehož systémová jazyková verze je angličtina (USA), zobrazí hlavní vlákno svůj počáteční řetězec v ruštině. Vzhledem k tomu, že jazyková verze pracovního vlákna je odvozena z aktuální jazykové verze systému Windows Windows nikoli aktuální jazykové verze aplikace, pracovní vlákno zobrazí svůj řetězec v angličtině.

Následující příklad používá vlastnosti a k definování aktuální jazykové verze a aktuální jazykové verze uživatelského DefaultThreadCurrentCulture DefaultThreadCurrentUICulture rozhraní nového vlákna aplikace.

V příkladu se používají stejné soubory prostředků jako v předchozím příkladu. Příkazy pro kompilaci a vložení lokalizovaných prostředků v ruštině do satelitního sestavení jsou také identické s tím rozdílem, že se změní název spustitelného sestavení.

Při spuštění příklad nastaví aktuální jazykovou verzi a aktuální jazykovou verzi uživatelského rozhraní na ruštinu (Ruština) ve všech systémech kromě těch, ve kterých je výchozí systémová jazyková verze již ruština (Rusko). Pokud je výchozí systémová jazyková verze již ruština (Ruština), nastaví aktuální jazykovou verzi a aktuální jazykovou verzi uživatelského rozhraní na angličtinu (USA). Potom zavolá rutinu , která při prvním volání zobrazí jednoduchý řetězec a po dalších voláních ShowGreeting metody mírně jiný řetězec. Dále vytvoří nové vlákno, které také spustí ShowGreeting rutinu.

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:
'       Привет!
'       Еще раз привет!

Jak ukazuje výstup z příkladu, když se příklad spustí v počítači, jehož systémová jazyková verze je angličtina (USA), zobrazí hlavní vlákno i pracovní vlákno své řetězce v ruštině.

Poznámky

V .NET Framework 4 a předchozích verzích je ve výchozím nastavení jazyková verze uživatelského rozhraní všech vláken nastavena na Windows jazykové verze. U aplikací, jejichž aktuální jazyková verze uživatelského rozhraní se liší od výchozí jazykové verze systému, je toto chování často nežádoucí. V .NET Framework 4.5 umožňuje vlastnost definovat výchozí jazykovou verzi uživatelského rozhraní všech vláken DefaultThreadCurrentUICulture v doméně aplikace.

Důležité

Pokud jste explicitně nenastaví jazykovou verzi uživatelského rozhraní pro žádná existující vlákna spuštěná v doméně aplikace, nastavení vlastnosti také změní jazykovou verzi DefaultThreadCurrentUICulture těchto vláken. Pokud se však tato vlákna spustí v jiné doméně aplikace, je jejich jazyková verze definovaná vlastností v doméně aplikace nebo výchozí systémovou jazykovou verzí, pokud není definována žádná výchozí DefaultThreadCurrentUICulture hodnota. Z tohoto důvodu doporučujeme vždy explicitně nastavit jazykovou verzi hlavního vlákna aplikace a nespoléhejte na vlastnost k definování jazykové verze hlavního DefaultThreadCurrentUICulture vlákna aplikace.

Pokud není explicitně nastavená, hodnota vlastnosti je a aktuální jazyková verze všech vláken v doméně aplikace, která nemá přiřazenou explicitní jazykovou verzi, je definována výchozí jazykovou DefaultThreadCurrentUICulture null Windows jazykové verze.

Další informace o jazykových verzích, vláknech a doménách aplikací najdete v částech Jazyková verze a vlákna a Jazykové verze a domény aplikací na CultureInfo referenční stránce.

Platí pro

Viz také