System.Globalization.CultureInfo.CurrentUICulture-Eigenschaft
Dieser Artikel enthält ergänzende Hinweise zur Referenzdokumentation für diese API.
Die CurrentUICulture Eigenschaft ist eine Threadeigenschaft. Das heißt, jeder Thread verfügt über eine eigene aktuelle UI-Kultur. Diese Eigenschaft entspricht dem Abrufen oder Festlegen des Objekts, das CultureInfo der System.Threading.Thread.CurrentThread.CurrentUICulture
Eigenschaft zugewiesen ist. Wenn ein Thread gestartet wird, wird die Ui-Kultur zunächst wie folgt bestimmt:
Durch Abrufen der Kultur, die von der Eigenschaft in der DefaultThreadCurrentUICulture Anwendung angegeben wird Standard in der der Thread ausgeführt wird, wenn der Eigenschaftswert nicht
null
ist.Wenn es sich bei dem Thread um einen Threadpoolthread handelt, der einen aufgabenbasierten asynchronen Vorgang ausführt und die App auf .NET Framework 4.6 oder eine höhere Version von .NET Framework ausgerichtet ist, wird die Benutzeroberflächenkultur durch die Benutzeroberflächenkultur des aufrufenden Threads bestimmt. Im folgenden Beispiel wird die aktuelle Benutzeroberflächenkultur in Portugiesisch (Brasilien) geändert und sechs Aufgaben gestartet, von denen jede die Thread-ID, die Aufgaben-ID und die aktuelle Ui-Kultur anzeigt. Jede der Aufgaben (und die Threads) hat die UI-Kultur des aufrufenden Threads geerbt.
using System; using System.Collections.Generic; using System.Globalization; using System.Runtime.Versioning; using System.Threading; using System.Threading.Tasks; public class Example { public static async Task Main() { var tasks = new List<Task>(); Console.WriteLine("The current UI culture is {0}", Thread.CurrentThread.CurrentUICulture.Name); Thread.CurrentThread.CurrentUICulture = new CultureInfo("pt-BR"); // Change the current UI culture to Portuguese (Brazil). Console.WriteLine("Current UI culture changed to {0}", Thread.CurrentThread.CurrentUICulture.Name); Console.WriteLine("Application thread is thread {0}", Thread.CurrentThread.ManagedThreadId); // Launch six tasks and display their current culture. for (int ctr = 0; ctr <= 5; ctr++) tasks.Add(Task.Run(() => { Console.WriteLine("UI Culture of task {0} on thread {1} is {2}", Task.CurrentId, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.CurrentUICulture.Name); })); await Task.WhenAll(tasks.ToArray()); } } // The example displays output like the following: // The current UI culture is en-US // Current UI culture changed to pt-BR // Application thread is thread 9 // UI Culture of task 2 on thread 11 is pt-BR // UI Culture of task 1 on thread 10 is pt-BR // UI Culture of task 3 on thread 11 is pt-BR // UI Culture of task 5 on thread 11 is pt-BR // UI Culture of task 6 on thread 11 is pt-BR // UI Culture of task 4 on thread 10 is pt-BR
Imports System.Globalization Imports System.Threading Module Example1 Public Sub Main() Dim tasks As New List(Of Task) Console.WriteLine("The current UI culture is {0}", Thread.CurrentThread.CurrentUICulture.Name) Thread.CurrentThread.CurrentUICulture = New CultureInfo("pt-BR") ' Change the current UI culture to Portuguese (Brazil). Console.WriteLine("Current culture changed to {0}", Thread.CurrentThread.CurrentUICulture.Name) Console.WriteLine("Application thread is thread {0}", Thread.CurrentThread.ManagedThreadId) ' Launch six tasks and display their current culture. For ctr As Integer = 0 To 5 tasks.Add(Task.Run(Sub() Console.WriteLine("Culture of task {0} on thread {1} is {2}", Task.CurrentId, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.CurrentUICulture.Name) End Sub)) Next Task.WaitAll(tasks.ToArray()) End Sub End Module ' The example displays output like the following: ' The current culture is en-US ' Current culture changed to pt-BR ' Application thread is thread 9 ' Culture of task 2 on thread 11 is pt-BR ' Culture of task 1 on thread 10 is pt-BR ' Culture of task 3 on thread 11 is pt-BR ' Culture of task 5 on thread 11 is pt-BR ' Culture of task 6 on thread 11 is pt-BR ' Culture of task 4 on thread 10 is pt-BR
Weitere Informationen finden Sie im Abschnitt "Kultur und aufgabenbasierte asynchrone Vorgänge" in der CultureInfo Dokumentation.
Durch Aufrufen der Windows-Funktion
GetUserDefaultUILanguage
.
Um die von einem Thread verwendete Benutzeroberflächenkultur zu ändern, legen Sie die Thread.CurrentUICulture Eigenschaft auf die neue Kultur fest. Wenn Sie die UI-Kultur eines Threads auf diese Weise explizit ändern, wird diese Änderung beibehalten, wenn der Thread die Anwendung überschreitet Standard Grenzen.
Hinweis
Wenn Sie den Eigenschaftswert auf ein CultureInfo Objekt festlegen, das eine neue Kultur darstellt, ändert sich auch der Wert der Thread.CurrentThread.CurrentCulture
Eigenschaft.
Abrufen der aktuellen Benutzeroberflächenkultur
Die CultureInfo.CurrentUICulture Eigenschaft ist eine Einstellung pro Thread, d. h. jeder Thread kann über eine eigene UI-Kultur verfügen. Sie erhalten die Ui-Kultur des aktuellen Threads, indem Sie den Wert der CultureInfo.CurrentUICulture Eigenschaft abrufen, wie das folgende Beispiel veranschaulicht.
using System;
using System.Globalization;
public class Example2
{
public static void Main()
{
CultureInfo culture = CultureInfo.CurrentUICulture;
Console.WriteLine("The current UI culture is {0} [{1}]",
culture.NativeName, culture.Name);
}
}
// The example displays output like the following:
// The current UI culture is English (United States) [en-US]
Imports System.Globalization
Module Example3
Public Sub Main()
Dim culture As CultureInfo = CultureInfo.CurrentCulture
Console.WriteLine("The current UI culture is {0} [{1}]",
culture.NativeName, culture.Name)
End Sub
End Module
' The example displays output like the following:
' The current UI culture is English (United States) [en-US]
Sie können auch den Wert der UI-Kultur des aktuellen Threads aus der Thread.CurrentUICulture Eigenschaft abrufen.
Explizite Festlegung der aktuellen Benutzeroberflächenkultur
Ab .NET Framework 4.6 können Sie die aktuelle Benutzeroberflächenkultur ändern, indem Sie der Eigenschaft ein CultureInfo Objekt zuweisen, das die neue Kultur CultureInfo.CurrentUICulture darstellt. Die aktuelle Benutzeroberflächenkultur kann entweder auf eine bestimmte Kultur (z. B. en-US oder de-DE) oder auf eine neutrale Kultur (z. B. en oder de) festgelegt werden. Im folgenden Beispiel wird die aktuelle UI-Kultur auf fr-FR oder Französisch (Frankreich) festgelegt.
using System;
using System.Globalization;
public class Example1
{
public static void Main()
{
Console.WriteLine("The current UI culture: {0}",
CultureInfo.CurrentUICulture.Name);
CultureInfo.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr-FR");
Console.WriteLine("The current UI culture: {0}",
CultureInfo.CurrentUICulture.Name);
}
}
// The example displays output like the following:
// The current UI culture: en-US
// The current UI culture: fr-FR
Imports System.Globalization
Module Example2
Public Sub Main()
Console.WriteLine("The current UI culture: {0}",
CultureInfo.CurrentUICulture.Name)
CultureInfo.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr-FR")
Console.WriteLine("The current UI culture: {0}",
CultureInfo.CurrentUICulture.Name)
End Sub
End Module
' The example displays output like the following:
' The current UI culture: en-US
' The current UI culture: fr-FR
In einer Multithreadanwendung können Sie die UI-Kultur eines beliebigen Threads explizit festlegen, indem Sie ein CultureInfo Objekt zuweisen, das diese Kultur der Eigenschaft des Thread.CurrentUICulture Threads darstellt. Wenn der Thread, dessen Kultur Sie festlegen möchten, der aktuelle Thread ist, können Sie der CultureInfo.CurrentUICulture Eigenschaft die neue Kultur zuweisen. Wenn die Benutzeroberflächenkultur eines Threads explizit festgelegt wird, behält dieser Thread dieselbe Kultur bei, auch wenn er die Anwendung überschreitet Standard Grenzen und führt Code in einer anderen Anwendung aus Standard.
Implizite Festlegung der aktuellen Benutzeroberflächenkultur
Wenn ein Thread, einschließlich des Standard Anwendungsthreads, zuerst erstellt wird, wird standardmäßig die aktuelle Ui-Kultur wie folgt festgelegt:
- Verwenden Sie die von der DefaultThreadCurrentUICulture Eigenschaft für die aktuelle Anwendung definierte Kultur Standard wenn der Eigenschaftswert nicht
null
ist. - Mithilfe der Standardkultur des Systems. Auf Systemen, die das Windows-Betriebssystem verwenden, ruft die Common Language Runtime die Windows-Funktion
GetUserDefaultUILanguage
auf, um die aktuelle Benutzeroberflächenkultur festzulegen.GetUserDefaultUILanguage
gibt die vom Benutzer festgelegte Standardkultur der Benutzeroberfläche zurück. Wenn der Benutzer keine Standardsprache für die Benutzeroberfläche festgelegt hat, wird die kultur zurückgegeben, die ursprünglich auf dem System installiert wurde.
Wenn der Thread Anwendungsgrenzen überschreitet und Code in einer anderen Anwendung ausführt Standard wird seine Kultur auf die gleiche Weise wie die eines neu erstellten Threads bestimmt.
Wenn Sie eine bestimmte Benutzeroberflächenkultur festlegen, die sich von der vom System installierten Benutzeroberflächenkultur oder der bevorzugten Benutzeroberflächenkultur unterscheidet, und ihre Anwendung mehrere Threads startet, wird die aktuelle Benutzeroberflächenkultur dieser Threads die von der GetUserDefaultUILanguage
Funktion zurückgegebene Kultur sein, es sei denn, Sie weisen der Eigenschaft in der DefaultThreadCurrentUICulture Anwendung eine Kultur zu Standard in der der Thread ausgeführt wird.
Sicherheitshinweise
Das Ändern der Kultur des aktuellen Threads erfordert eine SecurityPermission Berechtigung mit dem ControlThread Wertsatz.
Achtung
Das Bearbeiten von Threads ist aufgrund des Sicherheitsstatus, der Threads zugeordnet ist, gefährlich. Daher sollte diese Berechtigung nur vertrauenswürdigen Code und dann nur nach Bedarf erteilt werden. Sie können die Threadkultur im halb vertrauenswürdigen Code nicht ändern.
Die aktuelle Benutzeroberflächenkultur und UWP-Apps
In Universelle Windows-Plattform (UWP)-Apps ist die CurrentUICulture Eigenschaft schreibgeschützt, genau wie in .NET Framework- und .NET Core-Apps. Sie können sie verwenden, um die aktuelle Kultur abzurufen und festzulegen. UWP-Apps unterscheiden jedoch nicht zwischen der aktuellen Kultur und der aktuellen Benutzeroberflächenkultur. Die Eigenschaften CurrentCulture und CurrentUICulture werden dem ersten Wert in der Sammlung Windows.ApplicationModel.Resources.Core.ResourceManager.DefaultContext.Languages zugeordnet.
In .NET Framework- und .NET Core-Apps ist die aktuelle Ui-Kultur eine Einstellung pro Thread, und die CurrentUICulture Eigenschaft spiegelt nur die Ui-Kultur des aktuellen Threads wider. In UWP-Apps wird die aktuelle Kultur der Eigenschaft "Windows.ApplicationModel.Resources.Core.ResourceManager.DefaultContext.Languages ", einer globalen Einstellung, zugeordnet. Durch festlegen der CurrentCulture Eigenschaft wird die Kultur der gesamten App geändert. Die Kultur kann nicht pro Thread festgelegt werden.