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 null pokud je aktuální jazyková verze uživatelského rozhraní systému výchozí jazykovou verzí uživatelského rozhraní vlákna v doméně aplikace.

Výjimky

V operaci Name sady je hodnota vlastnosti neplatná.

Příklady

Následující příklad ukazuje výchozí chování rozhraní .NET Framework při definování aktuální jazykové verze nového vlákna. Používá anglické a ruské jazykové zdroje. Následující textový soubor s názvem GreetingStrings.txt obsahuje prostředky anglického jazyka:

greeting =Hello again!
newGreeting=Hello!

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

resgen greetingstrings.txt

Následující textový soubor s názvem GreetingStrings.ru-RU.txt obsahuje ruské jazykové zdroje:

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

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

resgen greetingstrings.ru-RU.txt

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

vbc Example1.vb /resource:GreetingStrings.resources

Pro kompilátor 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 záložní jazykovou verzi. Pomocí Linkeru sestavení můžete také vytvořit soubor prostředků pro ruskou jazykovou verzi (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 (Rusko) ve všech systémech s výjimkou těch, u kterých je výchozí jazyková verze systému již ruská (Rusko). Pokud je výchozí systémová jazyková verze již ruská (Rusko), kód nastaví aktuální jazykovou verzi a aktuální jazykovou verzi uživatelského rozhraní na angličtinu (USA). Pak volá rutinu ShowGreeting , která zobrazí jednoduchý řetězec při prvním volání a mírně odlišný řetězec pro následné volání metody. Dále vytvoří nové vlákno, které také spustí rutinu 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!

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

Následující příklad používá DefaultThreadCurrentCulture a DefaultThreadCurrentUICulture vlastnosti k definování aktuální jazykové verze a aktuální jazykové verze uživatelského 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 ruských jazykových prostředků do satelitního sestavení jsou také identické s tím rozdílem, že název spustitelného sestavení se změní.

Při spuštění příklad nastaví aktuální jazykovou verzi a aktuální jazykovou verzi uživatelského rozhraní na ruštinu (Rusko) ve všech systémech s výjimkou těch, u kterých je výchozí jazyková verze systému již ruská (Rusko). Pokud je výchozí jazyková verze systému už ruská (Rusko), nastaví aktuální jazykovou verzi a aktuální jazykovou verzi uživatelského rozhraní na angličtinu (USA). Pak volá rutinu ShowGreeting , která zobrazí jednoduchý řetězec při prvním volání a mírně odlišný řetězec pro následné volání metody. Dále vytvoří nové vlákno, které také spustí rutinu 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:
'       Привет!
'       Еще раз привет!

Jak ukazuje výstup z příkladu, když je příklad spuštěn na počítači, jehož systémová jazyková verze je angličtina (USA), hlavní vlákno i pracovní vlákno zobrazují své řetězce v ruském jazyce.

Poznámky

V rozhraní .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 nastavená na jazykovou verzi systému Windows. U aplikací, jejichž aktuální jazyková verze uživatelského rozhraní se liší od výchozí systémové jazykové verze, je toto chování často nežádoucí. V rozhraní .NET Framework 4.5 DefaultThreadCurrentUICulture umožňuje vlastnost definovat výchozí jazykovou verzi uživatelského rozhraní všech vláken v doméně aplikace.

Důležité

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

Pokud není nastaven explicitně, hodnota DefaultThreadCurrentUICulture vlastnosti je nulla aktuální jazyková verze všech vláken v doméně aplikace, která nebyla přiřazena explicitní jazykovou verzi, je definována ve výchozím Windows systémové jazykové verzi.

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é