CultureInfo.DefaultThreadCurrentUICulture Vlastnost
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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 null
a 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.