Sdílet prostřednictvím


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

Hodnota vlastnosti

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 nastavení 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 pro angličtinu:

greeting =Hello again!
newGreeting=Hello!

Je zkompilován 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=Привет!

Je zkompilován do binárního souboru .resources s názvem GreetingStrings.ru-RU.resources pomocí generátoru souborů prostředků s následujícím příkazem.

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 kompilátor jazyka Visual Basic:

vbc Example1.vb /resource:GreetingStrings.resources

U 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. Pomocí následujícího příkazu můžete také použít Assembly Linker k vytvoření souboru prostředků pro jazykovou verzi ruština (Rusko):

>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ština (Rusko) ve všech systémech s výjimkou těch, u kterých je výchozí jazyková verze systému již ruština (Rusko). Pokud je výchozí jazyková verze systému již ruština (Rusko), kód nastaví aktuální jazykovou verzi a aktuální jazykovou verzi uživatelského rozhraní na angličtinu (USA). Potom zavolá rutinu ShowGreeting , která při prvním volání zobrazí jednoduchý řetězec a mírně odlišný řetězec při volání následující 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, při spuštění příkladu na počítači, jehož jazyková verze systému 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 z aktuální jazykové verze Systému 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á DefaultThreadCurrentCulture vlastnosti a DefaultThreadCurrentUICulture 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 prostředků ruského jazyka 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ština (Rusko) ve všech systémech s výjimkou těch, u kterých je výchozí jazyková verze systému již ruština (Rusko). Pokud je výchozí jazyková verze systému již ruština (Rusko), nastaví aktuální jazykovou verzi a aktuální jazykovou verzi uživatelského rozhraní na angličtinu (USA). Potom zavolá rutinu ShowGreeting , která při prvním volání zobrazí jednoduchý řetězec a mírně odlišný řetězec při volání následující 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 zobrazí své řetězce v ruštině.

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 nastavena 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í žádných existujících vláken spouš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 spouští 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, výchozí jazykovou verzí systému. Z tohoto důvodu doporučujeme vždy explicitně nastavit jazykovou verzi hlavního vlákna aplikace a nespoléhat na DefaultThreadCurrentUICulture vlastnost při definování jazykové verze hlavního vlákna aplikace.

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

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é