CultureInfo.DefaultThreadCurrentUICulture Eigenschaft
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Ruft die standardmäßige Benutzeroberflächenkultur für Threads in der aktuellen Anwendungsdomäne ab oder legt diese fest.
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
Eigenschaftswert
Die Standardkultur der Benutzeroberfläche für Threads in der aktuellen Anwendungsdomäne oder null
, wenn die aktuelle Systemkultur der Benutzeroberfläche die standardmäßige Threadkultur der Benutzeroberfläche in der Anwendungsdomäne ist.
Ausnahmen
Bei einem SET-Vorgang ist der Eigenschaftswert Name ungültig.
Beispiele
Das folgende Beispiel veranschaulicht das Standardverhalten der .NET Framework beim Definieren der aktuellen Kultur eines neuen Threads. Es werden Ressourcen für Englisch und Russisch verwendet. Die folgende Textdatei namens GreetingStrings.txt die Ressourcen in englischer Sprache:
greeting =Hello again!
newGreeting=Hello!
Sie wird mithilfe des Ressourcendatei-Generators mit dem folgenden Befehl in eine binäre RESOURCES-Datei namens GreetingStrings.resources kompiliert.
resgen greetingstrings.txt
Die folgende Textdatei mit dem Namen GreetingStrings.ru-RU.txt die Ressourcen in der Sprache Russisch:
greeting=Еще раз привет!
newGreeting=Привет!
Sie wird in eine binäre RESOURCES-Datei namens GreetingStrings.ru-RU.resources kompiliert, indem der Ressourcendatei-Generator mit dem folgenden Befehl verwendet wird.
resgen greetingstrings.ru-RU.txt
Der Unten dargestellte Anwendungscode befindet sich in einer Datei mit dem Namen Example1.vb oder Example1.cs. Sie wird mithilfe des folgenden Befehls für den Visual Basic kompiliert:
vbc Example1.vb /resource:GreetingStrings.resources
Für den C#-Compiler sieht der Befehl ähnlich aus:
csc /resource:GreetingStrings.resources Example1.cs
Dadurch wird eine Assembly erstellt, die den ausführbaren Code des Beispiels zusammen mit den Ressourcen für seine Fallbackkultur enthält. Sie können auch den Assembly Linker verwenden, um die Ressourcendatei für die Kultur Russisch (Russisch) mit dem folgenden Befehl zu erstellen:
>al /embed:greetingstrings.ru-RU.resources /c:ru-RU /template:example1.exe /out:ru-RU\Example1.resources.dll
Beim Start legt das Beispiel die aktuelle Kultur und die aktuelle Benutzeroberflächenkultur auf allen Systemen auf Russisch (Russisch) fest, mit Ausnahme der Systeme, auf denen die Standardsystemkultur bereits Russisch (Russisch) ist. Wenn die Standardsystemkultur bereits Russisch (Russisch) ist, legt der Code die aktuelle Kultur und die aktuelle Benutzeroberflächenkultur auf Englisch (USA. Anschließend wird die -Routine aufgerufen, die beim ersten Aufruf eine einfache Zeichenfolge und bei nachfolgenden Methodenaufrufen eine etwas andere ShowGreeting
Zeichenfolge anzeigt. Als Nächstes wird ein neuer Thread erstellt, der auch die -Routine ShowGreeting
ausricht.
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!
Wie die Ausgabe des Beispiels zeigt, zeigt der Hauptthread seine ursprüngliche Zeichenfolge in Russisch an, wenn das Beispiel auf einem Computer ausgeführt wird, dessen Systemkultur Englisch (USA) ist. Da die Kultur des Arbeitsthreads jedoch von der aktuellen Windows-Systemkultur und nicht von der aktuellen Kultur der Anwendung abgeleitet ist, zeigt der Arbeitsthread seine Zeichenfolge auf Englisch an.
Im folgenden Beispiel werden die Eigenschaften und verwendet, um die aktuelle Kultur und die aktuelle DefaultThreadCurrentCulture DefaultThreadCurrentUICulture Benutzeroberflächenkultur eines neuen Anwendungsthreads zu definieren.
Im Beispiel werden die gleichen Ressourcendateien wie im vorherigen Beispiel verwendet. Die Befehle zum Kompilieren und Einbetten der lokalisierten Russisch-Sprachressourcen in eine Satelliten-Assembly sind ebenfalls identisch, mit der Ausnahme, dass sich der Name der ausführbaren Assembly ändert.
Beim Start legt das Beispiel die aktuelle Kultur und die aktuelle Benutzeroberflächenkultur auf allen Systemen auf Russisch (Russisch) fest, mit Ausnahme der Systeme, auf denen die Standardsystemkultur bereits Russisch (Russisch) ist. Wenn die Standardsystemkultur bereits Russisch (Russisch) ist, wird die aktuelle Kultur und die aktuelle Benutzeroberflächenkultur auf Englisch (USA. Anschließend wird die -Routine aufgerufen, die beim ersten Aufruf eine einfache Zeichenfolge und bei nachfolgenden Methodenaufrufen eine etwas andere ShowGreeting
Zeichenfolge anzeigt. Als Nächstes wird ein neuer Thread erstellt, der auch die -Routine ShowGreeting
ausricht.
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:
' Привет!
' Еще раз привет!
Wie die Ausgabe des Beispiels zeigt, zeigen sowohl der Hauptthread als auch der Arbeitsthread ihre Zeichenfolgen in der Sprache Russisch an, wenn das Beispiel auf einem Computer ausgeführt wird, dessen Systemkultur Englisch (USA) ist.
Hinweise
In der .NET Framework 4 und früheren Versionen wird die Benutzeroberflächenkultur aller Threads standardmäßig auf die Windows festgelegt. Bei Anwendungen, deren aktuelle Benutzeroberflächenkultur sich von der Standardsystemkultur unterscheidet, ist dieses Verhalten häufig unerwünscht. In der .NET Framework 4.5 können Sie mit der -Eigenschaft die Standardkultur der Benutzeroberfläche aller Threads DefaultThreadCurrentUICulture in einer Anwendungsdomäne definieren.
Wichtig
Wenn Sie die Benutzeroberflächenkultur vorhandener Threads, die in einer Anwendungsdomäne ausgeführt werden, nicht explizit festgelegt haben, ändert das Festlegen der -Eigenschaft auch die Kultur DefaultThreadCurrentUICulture dieser Threads. Wenn diese Threads jedoch in einer anderen Anwendungsdomäne ausgeführt werden, wird ihre Kultur durch die -Eigenschaft in dieser Anwendungsdomäne oder, wenn kein Standardwert definiert ist, durch die DefaultThreadCurrentUICulture Standardsystemkultur definiert. Aus diesem Grund wird empfohlen, die Kultur des Hauptanwendungsthreads immer explizit festzulegen und sich nicht auf die -Eigenschaft zu verlassen, um die Kultur des Hauptanwendungsthreads DefaultThreadCurrentUICulture zu definieren.
Sofern nicht explizit festgelegt, ist der Wert der -Eigenschaft , und die aktuelle Kultur aller Threads in einer Anwendungsdomäne, denen keine explizite Kultur zugewiesen wurde, wird durch die standarddefinierte Windows DefaultThreadCurrentUICulture null
definiert.
Weitere Informationen zu Kulturen, Threads und Anwendungsdomänen finden Sie in den Abschnitten "Kultur und Threads" und "Kultur und Anwendungsdomänen" auf CultureInfo der Referenzseite.