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 sady je hodnota vlastnosti neplatná.
Příklady
Následující příklad ukazuje výchozí chování rozhraní .NET 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!
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 prostředky ruského jazyka:
greeting=Еще раз привет!
newGreeting=Привет!
Je zkompilován 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. 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
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. Soubor prostředků pro jazykovou verzi Ruštiny (Rusko) můžete také vytvořit 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 ruskou (Rusko) ve všech systémech s výjimkou těch, na kterých je výchozí systémová jazyková verze 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 (Spojené státy). Potom volá rutinu ShowGreeting , která zobrazí jednoduchý řetězec při prvním volání a mírně odlišný řetězec při následných voláních 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 (Spojené státy), hlavní vlákno zobrazí jeho 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 z aktuální jazykové verze aplikace, zobrazí pracovní vlákno jeho řetězec v angličtině.
Následující příklad používá DefaultThreadCurrentCulture a DefaultThreadCurrentUICulture vlastnosti definovat aktuální jazykovou verzi a aktuální jazykovou verzi 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é stejné, 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 ruskou (Rusko) ve všech systémech s výjimkou těch, na kterých je výchozí systémová jazyková verze již ruská (Rusko). Pokud je výchozí systémová jazyková verze již ruská (Rusko), nastaví aktuální jazykovou verzi a aktuální jazykovou verzi uživatelského rozhraní na angličtinu (SPOJENÉ STÁTY). Potom volá rutinu ShowGreeting , která zobrazí jednoduchý řetězec při prvním volání a mírně odlišný řetězec při následných voláních 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 (Spojené státy), hlavní vlákno i pracovní vlákno zobrazí jejich ř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 nastavena na systémovou 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 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é nebyly přiřazeny explicitní jazykovou verzi, je definována výchozí systémovou jazykovou verzí systému Windows.
Další informace o jazykových verzích, vláknech a doménách aplikací naleznete v částech Jazykové verze a vlákna a Jazykové verze a domény aplikací .CultureInfo