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 nullist.

  • 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 nullist.
  • 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.