CultureInfo.CurrentCulture Eigenschaft

Definition

Ruft das -Objekt ab, das die vom aktuellen Thread und aufgabenbasierten asynchronen Vorgängen verwendete Kultur darstellt, CultureInfo oder legt dieses fest.

public:
 static property System::Globalization::CultureInfo ^ CurrentCulture { System::Globalization::CultureInfo ^ get(); void set(System::Globalization::CultureInfo ^ value); };
public:
 static property System::Globalization::CultureInfo ^ CurrentCulture { System::Globalization::CultureInfo ^ get(); };
public static System.Globalization.CultureInfo CurrentCulture { get; set; }
public static System.Globalization.CultureInfo CurrentCulture { get; }
member this.CurrentCulture : System.Globalization.CultureInfo with get, set
member this.CurrentCulture : System.Globalization.CultureInfo
Public Shared Property CurrentCulture As CultureInfo
Public Shared ReadOnly Property CurrentCulture As CultureInfo

Eigenschaftswert

CultureInfo

Die vom aktuellen Thread und aufgabenbasierten asynchronen Vorgängen verwendete Kultur.

Ausnahmen

Die Eigenschaft ist auf null festgelegt.

Beispiele

Im folgenden Beispiel wird veranschaulicht, wie und des aktuellen Threads geändert CurrentCulture CurrentUICulture werden.

using namespace System;
using namespace System::Globalization;
using namespace System::Threading;

int main()
{
   // Display the name of the current thread culture.
   Console::WriteLine("CurrentCulture is {0}.", CultureInfo::CurrentCulture->Name);
   
   // Change the current culture to th-TH.
   CultureInfo::CurrentCulture = gcnew CultureInfo("th-TH",false);
   Console::WriteLine("CurrentCulture is now {0}.", CultureInfo::CurrentCulture->Name);
   
   // Displays the name of the CurrentUICulture of the current thread.
   Console::WriteLine("CurrentUICulture is {0}.", CultureInfo::CurrentCulture->Name);
   
   // Changes the CurrentUICulture of the current thread to ja-JP.
   CultureInfo::CurrentUICulture = gcnew CultureInfo("ja-JP",false);
   Console::WriteLine("CurrentUICulture is now {0}.", CultureInfo::CurrentCulture->Name);
}
// The example displays the following output:
//       CurrentCulture is en-US.
//       CurrentCulture is now th-TH.
//       CurrentUICulture is en-US.
//       CurrentUICulture is now ja-JP.
using System;
using System.Globalization;
using System.Threading;

public class Example
{
   public static void Main()
   {
      // Display the name of the current culture.
      Console.WriteLine("CurrentCulture is {0}.", CultureInfo.CurrentCulture.Name);

      // Change the current culture to th-TH.
      CultureInfo.CurrentCulture = new CultureInfo("th-TH", false);
      Console.WriteLine("CurrentCulture is now {0}.", CultureInfo.CurrentCulture.Name);

      // Display the name of the current UI culture.
      Console.WriteLine("CurrentUICulture is {0}.", CultureInfo.CurrentUICulture.Name);

      // Change the current UI culture to ja-JP.
      CultureInfo.CurrentUICulture = new CultureInfo( "ja-JP", false );
      Console.WriteLine("CurrentUICulture is now {0}.", CultureInfo.CurrentUICulture.Name);
   }
}
// The example displays the following output:
//       CurrentCulture is en-US.
//       CurrentCulture is now th-TH.
//       CurrentUICulture is en-US.
//       CurrentUICulture is now ja-JP.
Imports System.Globalization
Imports System.Threading

Public Module Example
   Public Sub Main()

      ' Display the name of the current culture.
      Console.WriteLine("CurrentCulture is {0}.", CultureInfo.CurrentCulture.Name)

      ' Change the current culture to th-TH.
      CultureInfo.CurrentCulture = New CultureInfo("th-TH", False)
      Console.WriteLine("CurrentCulture is now {0}.", CultureInfo.CurrentCulture.Name)

      ' Display the name of the current UI culture.
      Console.WriteLine("CurrentUICulture is {0}.", CultureInfo.CurrentUICulture.Name)

      ' Change the current UI culture to ja-JP.
      CultureInfo.CurrentUICulture = New CultureInfo("ja-JP", False)
      Console.WriteLine("CurrentUICulture is now {0}.", CultureInfo.CurrentUICulture.Name)
   End Sub 
End Module
' The example displays the following output:
'       CurrentCulture is en-US.
'       CurrentCulture is now th-TH.
'       CurrentUICulture is en-US.
'       CurrentUICulture is now ja-JP.

Hinweise

Das -Objekt, das von dieser Eigenschaft zurückgegeben wird, und die zugehörigen Objekte bestimmen das Standardformat für Datumsangaben, Zeiten, Zahlen, Währungswerte, die Sortierreihenfolge von Text, Groß-/Kleinbuchdekonventionen und CultureInfo Zeichenfolgenvergleiche.

Die aktuelle Kultur ist eine Eigenschaft des ausgeführten Threads. Wenn Sie diese Eigenschaft auf ein -Objekt festlegen, das eine neue Kultur darstellt, ändert sich auch CultureInfo der Thread.CurrentThread.CurrentCulture Wert der -Eigenschaft. Es wird jedoch empfohlen, immer die -Eigenschaft zum Abrufen CultureInfo.CurrentCulture und Festlegen der aktuellen Kultur zu verwenden.

Das CultureInfo Von dieser Eigenschaft zurückgegebene Objekt ist schreibgeschützt. Das bedeutet, dass Sie das vorhandene Objekt nicht ändern können, z. B. durch Ändern des DateTimeFormat . Um das Datums-/Uhrzeitformat oder einen anderen Aspekt der aktuellen Kultur zu ändern, erstellen Sie ein neues -Objekt, und weisen Sie es CultureInfo der -Eigenschaft zu.

Hinweis

In .NET Framework 4.5.2 und früheren Versionen ist die Eigenschaft schreibgeschützt. Das heißt, Sie können den Eigenschaftswert abrufen, aber nicht CultureInfo.CurrentCulture festlegen.

In diesem Abschnitt

Wie die Kultur eines Threads bestimmt wird
Aktuelle Kultur
Explizites Festlegen der CurrentCulture-Eigenschaft
Benutzerüberschreibungen
Kultur und Windows Apps

Bestimmen der Kultur eines Threads

Wenn ein Thread gestartet wird, wird seine Kultur zunächst wie folgt bestimmt:

  • Durch Abrufen der Kultur, die von der DefaultThreadCurrentCulture -Eigenschaft in der Anwendungsdomäne angegeben wird, in der der Thread ausgeführt wird, wenn der Eigenschaftswert nicht null ist.

  • Wenn der Thread ein Threadpoolthread ist, der einen aufgabenbasierten asynchronen Vorgang ausführt und die App auf die .NET Framework 4.6 oder eine höhere Version des .NET Framework abzielt, wird seine Kultur durch die Kultur des aufrufenden Threads bestimmt. Im folgenden Beispiel wird die aktuelle Kultur in Portugiesisch (Brasilien) geändert und sechs Aufgaben gestartet, von denen jede die Thread-ID, die Task-ID und die aktuelle Kultur anzeigt. Jeder der Aufgaben (und die Threads) hat die 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;
    
    [assembly:TargetFramework(".NETFramework,Version=v4.6")]
    
    public class Example
    {
       public static async Task Main()
       {
          var tasks = new List<Task>();
          Console.WriteLine("The current culture is {0}",
                            Thread.CurrentThread.CurrentCulture.Name);
          Thread.CurrentThread.CurrentCulture = new CultureInfo("pt-BR");
          // Change the current culture to Portuguese (Brazil).
          Console.WriteLine("Current culture changed to {0}",
                            Thread.CurrentThread.CurrentCulture.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("Culture of task {0} on thread {1} is {2}",
                                                     Task.CurrentId,
                                                     Thread.CurrentThread.ManagedThreadId,
                                                     Thread.CurrentThread.CurrentCulture.Name);
                                } ));
    
          await Task.WhenAll(tasks.ToArray());
       }
    }
    // 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
    
    Imports System.Collections.Generic
    Imports System.Globalization
    Imports System.Runtime.Versioning
    Imports System.Threading
    Imports System.Threading.Tasks
    
    <assembly:TargetFramework(".NETFramework,Version=v4.6")>
    
    Module Example
       Public Sub Main()
          Dim tasks As New List(Of Task)
          Console.WriteLine("The current culture is {0}", 
                            Thread.CurrentThread.CurrentCulture.Name)
          Thread.CurrentThread.CurrentCulture = New CultureInfo("pt-BR")
          ' Change the current culture to Portuguese (Brazil).
          Console.WriteLine("Current culture changed to {0}",
                            Thread.CurrentThread.CurrentCulture.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.CurrentCulture.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" des CultureInfo Themas.

  • Durch Aufrufen der GetUserDefaultLocaleName Funktion auf Windows oder der Funktion von uloc_getDefault ICU,die derzeit die POSIX-Funktion setlocale mit der Kategorie LC_MESSAGES aufruft, auf Unix-ähnlichen Systemen.

Beachten Sie Folgendes: Wenn Sie eine bestimmte Kultur festlegen, die sich von der vom System installierten Kultur oder der bevorzugten Kultur des Benutzers unterscheidet und Ihre Anwendung mehrere Threads startet, ist die aktuelle Kultur dieser Threads die Kultur, die von der Funktion zurückgegeben GetUserDefaultLocaleName wird, es sei denn, Sie weisen der DefaultThreadCurrentCulture Eigenschaft in der Anwendungsdomäne, in der der Thread ausgeführt wird, eine Kultur zu.

Weitere Informationen zur Bestimmung der Kultur eines Threads finden Sie im Abschnitt "Kultur und Threads" auf der CultureInfo Referenzseite.

Abrufen der aktuellen Kultur

Die CultureInfo.CurrentCulture -Eigenschaft ist eine threadspezifische Einstellung, d. h., jeder Thread kann über eine eigene Kultur verfügen. Sie erhalten die Kultur des aktuellen Threads, indem Sie den Wert der CultureInfo.CurrentCulture -Eigenschaft abrufen, wie im folgenden Beispiel veranschaulicht.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo culture = CultureInfo.CurrentCulture;
      Console.WriteLine("The current culture is {0} [{1}]",
                        culture.NativeName, culture.Name);
   }
}
// The example displays output like the following:
//       The current culture is English (United States) [en-US]
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim culture As CultureInfo = CultureInfo.CurrentCulture
      Console.WriteLine("The current culture is {0} [{1}]",
                        culture.NativeName, culture.Name)
   End Sub
End Module
' The example displays output like the following:
'     The current culture is English (United States) [en-US]

Explizites Festlegen der CurrentCulture-Eigenschaft

Um die Kultur zu ändern, die von einem vorhandenen Thread verwendet wird, legen Sie die CultureInfo.CurrentCulture -Eigenschaft auf die neue Kultur fest. Wenn Sie die Kultur eines Threads auf diese Weise explizit ändern, wird diese Änderung beibehalten, wenn der Thread die Grenzen der Anwendungsdomäne überschreitet. Im folgenden Beispiel wird die aktuelle Threadkultur in Niederländisch (Niederländisch) geändert. Außerdem wird gezeigt, dass die aktuelle Kultur geändert bleibt, wenn der aktuelle Thread die Grenzen der Anwendungsdomäne überschreitet.

using System;
using System.Globalization;
using System.Threading;

public class Info : MarshalByRefObject
{
   public void ShowCurrentCulture()
   {
      Console.WriteLine("Culture of {0} in application domain {1}: {2}",
                        Thread.CurrentThread.Name,
                        AppDomain.CurrentDomain.FriendlyName,
                        CultureInfo.CurrentCulture.Name);
   }
}

public class Example
{
   public static void Main()
   {
      Info inf = new Info();
      // Set the current culture to Dutch (Netherlands).
      Thread.CurrentThread.Name = "MainThread";
      CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("nl-NL");
      inf.ShowCurrentCulture();

      // Create a new application domain.
       AppDomain ad = AppDomain.CreateDomain("Domain2");
       Info inf2 = (Info) ad.CreateInstanceAndUnwrap(typeof(Info).Assembly.FullName, "Info");
       inf2.ShowCurrentCulture();
   }
}
// The example displays the following output:
//       Culture of MainThread in application domain ChangeCulture1.exe: nl-NL
//       Culture of MainThread in application domain Domain2: nl-NL
Imports System.Globalization
Imports System.Threading

Public Class Info : Inherits MarshalByRefObject
   Public Sub ShowCurrentCulture()
      Console.WriteLine("Culture of {0} in application domain {1}: {2}",
                        Thread.CurrentThread.Name,
                        AppDomain.CurrentDomain.FriendlyName,
                        CultureInfo.CurrentCulture.Name)
   End Sub
End Class

Module Example
   Public Sub Main()
      Dim inf As New Info()
      ' Set the current culture to Dutch (Netherlands).
      Thread.CurrentThread.Name = "MainThread"
      CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("nl-NL")
      inf.ShowCurrentCulture()
      
      ' Create a new application domain.
       Dim ad As AppDomain = AppDomain.CreateDomain("Domain2")
       Dim inf2 As Info = CType(ad.CreateInstanceAndUnwrap(GetType(Info).Assembly.FullName, "Info"),
                          Info)  
       inf2.ShowCurrentCulture()                       
   End Sub
End Module
' This example displays the following output:
'       Culture of MainThread in application domain Example.exe: nl-NL
'       Culture of MainThread in application domain Domain2: nl-NL

Hinweis

Zum Ändern der Kultur mithilfe der CultureInfo.CurrentCulture -Eigenschaft ist eine SecurityPermission Berechtigung mit dem festgelegten Wert ControlThread erforderlich. Das Bearbeiten von Threads ist aufgrund des Sicherheitsstatus, der Threads zugeordnet ist, gefährlich. Daher sollte diese Berechtigung nur für vertrauenswürdigen Code und dann nur bei Bedarf erteilt werden. Sie können die Threadkultur in teilweise vertrauenswürdigen Code nicht ändern.

Ab .NET Framework 4 können Sie die aktuelle Threadkultur explizit in eine bestimmte Kultur (z. B. Französisch (Kanada)) oder eine neutrale Kultur (z. B. Französisch) ändern. Wenn ein CultureInfo -Objekt eine neutrale Kultur darstellt, spiegeln die Werte von CultureInfo Eigenschaften wie , , , und die spezifische Kultur Calendar CompareInfo DateTimeFormat NumberFormat TextInfo wider, die der neutralen Kultur zugeordnet ist. Die vorherrschende Kultur für die neutrale Englische Kultur ist beispielsweise Englisch (USA); die vorherrschende Kultur für die deutsche Kultur ist Deutsch (Deutschland). Das folgende Beispiel veranschaulicht den Unterschied bei der Formatierung, wenn die aktuelle Kultur auf eine bestimmte Kultur, Französisch (Kanada) und eine neutrale Kultur, Französisch, festgelegt ist.

using System;
using System.Globalization;
using System.Threading;

public class Example
{
   public static void Main()
   {
      double value = 1634.92;
      CultureInfo.CurrentCulture = new CultureInfo("fr-CA");
      Console.WriteLine("Current Culture: {0}",
                        CultureInfo.CurrentCulture.Name);
      Console.WriteLine("{0:C2}\n", value);

      Thread.CurrentThread.CurrentCulture = new CultureInfo("fr");
      Console.WriteLine("Current Culture: {0}",
                        CultureInfo.CurrentCulture.Name);
      Console.WriteLine("{0:C2}", value);
   }
}
// The example displays the following output:
//       Current Culture: fr-CA
//       1 634,92 $
//
//       Current Culture: fr
//       1 634,92 €
Imports System.Globalization
Imports System.Threading

Module Example
   Public Sub Main()
      Dim value As Double = 1634.92
      CultureInfo.CurrentCulture = New CultureInfo("fr-CA")
      Console.WriteLine("Current Culture: {0}", 
                        CultureInfo.CurrentCulture.Name)
      Console.WriteLine("{0:C2}", value)
      Console.WriteLine()
      
      Thread.CurrentThread.CurrentCulture = New CultureInfo("fr")
      Console.WriteLine("Current Culture: {0}", 
                        CultureInfo.CurrentCulture.Name)
      Console.WriteLine("{0:C2}", value)
   End Sub
End Module
' The example displays the following output:
'       Current Culture: fr-CA
'       1 634,92 $
'       
'       Current Culture: fr
'       1 634,92 €

Sie können auch die CultureInfo.CurrentCulture -Eigenschaft zusammen mit der HttpRequest.UserLanguages -Eigenschaft verwenden, um die CurrentCulture -Eigenschaft einer ASP.NET Anwendung auf die bevorzugte Kultur des Benutzers festzulegen, wie im folgenden Beispiel veranschaulicht.

CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.UserLanguages[0]);
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.UserLanguages(0))

Aktuelle Kultur und Benutzerüberschreibungen

Windows ermöglicht Benutzern das Überschreiben der Standardeigenschaftswerte des CultureInfo Objekts und der zugehörigen Objekte mithilfe von Regions- und Sprachoptionen in Systemsteuerung. Das CultureInfo von der -Eigenschaft zurückgegebene -Objekt CurrentCulture spiegelt diese Benutzerüberschreibungen in den folgenden Fällen wider:

  • Wenn die aktuelle Threadkultur implizit von der Windows Funktion festgelegt GetUserDefaultLocaleName wird.

  • Wenn die durch die -Eigenschaft definierte aktuelle Threadkultur DefaultThreadCurrentCulture der aktuellen Windows Systemkultur entspricht.

  • Wenn die aktuelle Threadkultur explizit auf eine von der -Methode zurückgegebene Kultur festgelegt ist CreateSpecificCulture und diese Kultur der aktuellen Windows Systemkultur entspricht.

  • Wenn die aktuelle Threadkultur explizit auf eine Kultur festgelegt wird, die vom Konstruktor instanziiert CultureInfo(String) wird, und diese Kultur der aktuellen Windows Systemkultur entspricht.

In einigen Fällen, insbesondere bei Serveranwendungen, kann das Festlegen der aktuellen Kultur auf ein CultureInfo -Objekt, das Benutzerüberschreibungen widerspiegelt, unerwünscht sein. Stattdessen können Sie die aktuelle Kultur auf ein CultureInfo -Objekt festlegen, das keine Benutzerüberschreibungen auf folgende Weise widerspiegelt:

Aktuelle Kultur und UWP-Apps

In UWP-Apps (Universal Windows Platform) ist die CurrentCulture Eigenschaft lese-/schreibgeschützt, wie sie in .NET Framework- und .NET Core-Apps vorliegt. Sie können sie sowohl zum Abrufen als auch zum Festlegen der aktuellen Kultur verwenden. UWP-Apps unterscheiden jedoch nicht zwischen der aktuellen Kultur und der aktuellen Benutzeroberflächenkultur. Die CurrentCulture Eigenschaften und werden dem ersten Wert im Windows CurrentUICulture zugeordnet. ApplicationModel.Resources.Core.ResourceManager.DefaultContext.Languages-Sammlung.

In .NET Framework- und .NET Core-Apps ist die aktuelle Kultur eine threadspezifische Einstellung, und die CurrentCulture -Eigenschaft spiegelt nur die Kultur des aktuellen Threads wider. In UWP-Apps wird die aktuelle Kultur dem Windows zugeordnet. ApplicationModel.Resources.Core.ResourceManager.DefaultContext.Languages-Eigenschaft, eine globale Einstellung. Durch festlegen der CurrentCulture -Eigenschaft wird die Kultur der gesamten App geändert. Die Kultur kann nicht threadbezogen festgelegt werden.

Gilt für

Siehe auch