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; }
member this.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 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.