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; }
static member 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 des .NET Framework beim Definieren der aktuellen Kultur eines neuen Threads. Es werden Ressourcen der englischen und russischen Sprache verwendet. Die folgende Textdatei mit dem Namen GreetingStrings.txt enthält die englischen Sprachressourcen:
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 enthält die Ressourcen der russischen Sprache:
greeting=Еще раз привет!
newGreeting=Привет!
Sie wird mithilfe des Ressourcendatei-Generators mit dem folgenden Befehl in eine binäre RESOURCES-Datei namens GreetingStrings.ru-RU.resources kompiliert.
resgen greetingstrings.ru-RU.txt
Der unten gezeigte Anwendungscode befindet sich in einer Datei mit dem Namen Example1.vb oder Example1.cs. Es wird mit dem folgenden Befehl für den Visual Basic-Compiler in eine ausführbare Datei kompiliert:
vbc Example1.vb /resource:GreetingStrings.resources
Für den C#-Compiler ist der Befehl ähnlich:
csc /resource:GreetingStrings.resources Example1.cs
Dadurch wird eine Assembly erstellt, die den ausführbaren Code des Beispiels zusammen mit den Ressourcen für die Fallbackkultur enthält. Sie können auch den Assembly linker verwenden, um die Ressourcendatei für die Kultur "Russisch (Russland)" 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 (Russland) fest, mit Ausnahme der Systeme, für die die Standardsystemkultur bereits Russisch (Russland) ist. Wenn die Standardsystemkultur bereits Russisch (Russland) ist, legt der Code die aktuelle Kultur und die aktuelle Benutzeroberflächenkultur auf Englisch (USA) fest. Anschließend wird die ShowGreeting
Routine aufgerufen, die beim ersten Aufruf eine einfache Zeichenfolge und eine etwas andere Zeichenfolge bei nachfolgenden Methodenaufrufen anzeigt. Als Nächstes wird ein neuer Thread erstellt, der auch die ShowGreeting
Routine ausführt.
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 Standard Thread, wenn das Beispiel auf einem Computer ausgeführt wird, dessen Systemkultur englisch (USA) ist, seine anfängliche Zeichenfolge auf Russisch an. Da die Kultur des Workerthreads jedoch von der aktuellen Windows-Systemkultur und nicht von der aktuellen Kultur der Anwendung abgeleitet wird, zeigt der Workerthread seine Zeichenfolge auf Englisch an.
Im folgenden Beispiel werden die DefaultThreadCurrentCulture Eigenschaften und DefaultThreadCurrentUICulture verwendet, um die aktuelle Kultur und die aktuelle Ui-Kultur eines neuen Anwendungsthreads zu definieren.
Im Beispiel werden dieselben Ressourcendateien wie im vorherigen Beispiel verwendet. Die Befehle zum Kompilieren und Einbetten der lokalisierten russischen Sprachressourcen in eine Satellitenassembly 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 (Russland) fest, mit Ausnahme der Systeme, für die die Standardsystemkultur bereits Russisch (Russland) ist. Wenn die Standardsystemkultur bereits Russisch (Russland) ist, wird die aktuelle Kultur und die aktuelle Benutzeroberflächenkultur auf Englisch (USA) festgelegt. Anschließend wird die ShowGreeting
Routine aufgerufen, die beim ersten Aufruf eine einfache Zeichenfolge und eine etwas andere Zeichenfolge bei nachfolgenden Methodenaufrufen anzeigt. Als Nächstes wird ein neuer Thread erstellt, der auch die ShowGreeting
Routine ausführt.
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 Standard-Thread als auch der Workerthread ihre Zeichenfolgen in der russischen Sprache an, wenn das Beispiel auf einem Computer ausgeführt wird, dessen Systemkultur englisch (USA) ist.
Hinweise
In den .NET Framework 4 und früheren Versionen ist die Benutzeroberflächenkultur aller Threads standardmäßig auf die Windows-Systemkultur festgelegt. Für Anwendungen, deren aktuelle Benutzeroberflächenkultur sich von der Standardsystemkultur unterscheidet, ist dieses Verhalten häufig unerwünscht. Im .NET Framework 4.5 können Sie mit der DefaultThreadCurrentUICulture -Eigenschaft die Standardkultur der Benutzeroberfläche aller Threads in einer Anwendungsdomäne definieren.
Wichtig
Wenn Sie nicht explizit die Ui-Kultur vorhandener Threads festgelegt haben, die in einer Anwendungsdomäne ausgeführt werden, ändert das Festlegen der DefaultThreadCurrentUICulture Eigenschaft auch die Kultur dieser Threads. Wenn diese Threads jedoch in einer anderen Anwendungsdomäne ausgeführt werden, wird ihre Kultur durch die -Eigenschaft in dieser DefaultThreadCurrentUICulture Anwendungsdomäne oder, wenn kein Standardwert definiert ist, durch die Standardsystemkultur definiert. Aus diesem Grund wird empfohlen, immer explizit die Kultur Ihres Standard Anwendungsthreads festzulegen und sich nicht auf die DefaultThreadCurrentUICulture -Eigenschaft zu verlassen, um die Kultur des Standard Anwendungsthreads zu definieren.
Sofern sie nicht explizit festgelegt ist, ist null
der Wert der DefaultThreadCurrentUICulture Eigenschaft , und die aktuelle Kultur aller Threads in einer Anwendungsdomäne, denen keine explizite Kultur zugewiesen wurde, wird durch die Windows-Standardsystemkultur definiert.
Weitere Informationen zu Kulturen, Threads und Anwendungsdomänen finden Sie in den Abschnitten "Kultur und Threads" und "Kultur und Anwendungsdomänen" auf der CultureInfo Referenzseite.