CultureInfo.CurrentCulture 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.
Dient zum Abrufen oder Festlegen des CultureInfo Objekts, das die Kultur darstellt, die vom aktuellen Thread und aufgabenbasierten asynchronen Vorgängen verwendet wird.
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; }
static member CurrentCulture : System.Globalization.CultureInfo with get, set
static member CurrentCulture : System.Globalization.CultureInfo
Public Shared Property CurrentCulture As CultureInfo
Public Shared ReadOnly Property CurrentCulture As CultureInfo
Eigenschaftswert
Die Kultur, die vom aktuellen Thread und aufgabenbasierten asynchronen Vorgängen verwendet wird.
Ausnahmen
Die Eigenschaft ist auf null.
Beispiele
Im folgenden Beispiel wird veranschaulicht, wie der CurrentCulture aktuelle Thread und CurrentUICulture der aktuelle Thread geändert werden.
using System;
using System.Globalization;
public class Example0
{
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 Example2
Public Sub Run()
' 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 CultureInfo-Objekt, das von der CurrentCulture-Eigenschaft und seinen zugehörigen Objekten zurückgegeben wird, bestimmt das Standardformat für Datums-, Zeit-, Zahlen- und Währungswerte, die Sortierreihenfolge von Text, Groß-/Kleinschreibung und String-Vergleiche.
Die aktuelle Kultur ist eine Eigenschaft des ausführenden Threads. Wenn Sie diese Eigenschaft auf ein CultureInfo Objekt festlegen, das eine neue Kultur darstellt, ändert sich auch der Wert der Thread.CurrentThread.CurrentCulture Eigenschaft. Es wird jedoch empfohlen, die Eigenschaft CultureInfo.CurrentCulture immer zum Abrufen und Festlegen der aktuellen Kultur zu verwenden.
Das Objekt CultureInfo, das diese Eigenschaft zurückgibt, ist schreibgeschützt. Dies bedeutet, dass Sie das vorhandene Objekt nicht verändern können, z. B. durch Ändern des DateTimeFormat. Wenn Sie das Datums-/Uhrzeitformat oder einen anderen Aspekt der aktuellen Kultur ändern möchten, erstellen Sie ein neues CultureInfo Objekt, und weisen Sie es der Eigenschaft zu.
Wie die Kultur eines Threads bestimmt wird
Wenn ein Thread gestartet wird, wird seine Kultur zunächst wie folgt bestimmt:
Durch das Abrufen der Kultur, die durch die Eigenschaft DefaultThreadCurrentCulture in der Anwendungsdomäne angegeben ist, in der der Thread ausgeführt wird, wenn der Eigenschaftswert nicht
nullist.Wenn der Thread ein Threadpool-Thread ist, der einen aufgabenbasierten asynchronen Vorgang ausführt, wird seine Kulturumgebung durch die Kultur des aufrufenden Threads bestimmt. Das folgende Beispiel ändert die aktuelle Kultur in Portugiesisch (Brasilien) und startet sechs Aufgaben, von denen jede ihre Thread-ID, ihre Aufgaben-ID und ihre aktuelle Kultur anzeigt. Jede der Aufgaben (und die Threads) hat die Kultur des aufrufenden Threads geerbt.
using System; using System.Collections.Generic; using System.Globalization; using System.Threading; using System.Threading.Tasks; public class Example14 { public static async Task Main() { var tasks = new List<Task>(); Console.WriteLine($"The current culture is {Thread.CurrentThread.CurrentCulture.Name}"); Thread.CurrentThread.CurrentCulture = new CultureInfo("pt-BR"); // Change the current culture to Portuguese (Brazil). Console.WriteLine($"Current culture changed to {Thread.CurrentThread.CurrentCulture.Name}"); Console.WriteLine($"Application thread is thread {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 {Task.CurrentId} on thread {Thread.CurrentThread.ManagedThreadId} is {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-BRImports System.Globalization Imports System.Threading Module Example1 Public Sub S1() 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-BRWeitere Informationen finden Sie unter Kultur- und aufgabenbasierte asynchrone Vorgänge.
Durch Aufrufen der
GetUserDefaultLocaleNameFunktion unter Windows oder deruloc_getDefaultFunktion von ICU, die derzeit die POSIX-Funktionsetlocalemit KategorieLC_MESSAGESaufruft, auf Unix-ähnlichen Systemen.
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 GetUserDefaultLocaleName Funktion zurückgegeben wird, es sei denn, Sie weisen der Eigenschaft in der DefaultThreadCurrentCulture Anwendungsdomäne, in der der Thread ausgeführt wird, eine Kultur zu.
Weitere Informationen dazu, wie die Kultur eines Threads bestimmt wird, finden Sie im Abschnitt "Kultur und Threads" auf der CultureInfo Referenzseite.
Abrufen der aktuellen Kultur
Die CultureInfo.CurrentCulture Eigenschaft ist eine Einstellung pro Thread, 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 das folgende Beispiel veranschaulicht.
using System;
using System.Globalization;
public class Example5
{
public static void Main()
{
CultureInfo culture = CultureInfo.CurrentCulture;
Console.WriteLine($"The current culture is {culture.NativeName} [{culture.Name}]");
}
}
// The example displays output like the following:
// The current culture is English (United States) [en-US]
Imports System.Globalization
Module Example3
Public Sub S1()
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]
Festlegen der CurrentCulture-Eigenschaft explizit
Um die Kultur zu ändern, die von einem vorhandenen Thread verwendet wird, legen Sie die CultureInfo.CurrentCulture Eigenschaft auf die neue Kultur fest. Im folgenden Beispiel wird die aktuelle Threadkultur auf Niederländisch (Niederlande) geändert.
using System;
using System.Globalization;
using System.Threading;
public class Info11 : MarshalByRefObject
{
public void ShowCurrentCulture()
{
Console.WriteLine($"Culture of thread {Thread.CurrentThread.Name}: {CultureInfo.CurrentCulture.Name}");
}
}
public class SetCultureExample
{
public static void Run()
{
Info11 inf = new Info11();
// Set the current culture to Dutch (Netherlands).
Thread.CurrentThread.Name = "MainThread";
CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("nl-NL");
inf.ShowCurrentCulture();
}
}
// The example displays the following output:
//
// Culture of thread MainThread: nl-NL
Note
Das Ändern der Kultur mithilfe der CultureInfo.CurrentCulture-Eigenschaft erfordert eine SecurityPermission-Berechtigung mit dem ControlThread-Wertsatz. Das Bearbeiten von Threads ist aufgrund des Sicherheitsstatus, der Threads zugeordnet ist, gefährlich. Daher sollte diese Berechtigung nur vertrauenswürdigem Code und dann nur nach Bedarf erteilt werden. Sie können die Threadkultur im halb vertrauenswürdigen Code nicht ändern.
Sie können 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 Calendar, CompareInfo, DateTimeFormat, NumberFormat und TextInfo die spezifische Kultur wider, die der neutralen Kultur zugeordnet ist. Die dominante Kultur der englischen neutralen Kultur ist z. B. Englisch (USA); die dominante Kultur der deutschen Kultur ist Deutsch (Deutschland). Im folgenden Beispiel wird der Unterschied bei der Formatierung veranschaulicht, 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 Example12
{
public static void Main()
{
double value = 1634.92;
CultureInfo.CurrentCulture = new CultureInfo("fr-CA");
Console.WriteLine($"Current Culture: {CultureInfo.CurrentCulture.Name}");
Console.WriteLine($"{value:C2}\n");
Thread.CurrentThread.CurrentCulture = new CultureInfo("fr");
Console.WriteLine($"Current Culture: {CultureInfo.CurrentCulture.Name}");
Console.WriteLine($"{value:C2}");
}
}
// 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 Example4
Public Sub S1()
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 €
Aktuelle Kultur- und Benutzerüberschreibungen
Windows ermöglicht Benutzern das Überschreiben der Standardeigenschaftenwerte des CultureInfo Objekts und der zugehörigen Objekte mithilfe der Regions- und Sprachoptionen in der Systemsteuerung. Das CultureInfo-Objekt, das von der Eigenschaft CurrentCulture zurückgegeben wird, spiegelt diese Benutzerüberschreibungen in den folgenden Fällen wider:
- Wenn die aktuelle Threadkultur implizit von der Windows-Funktion
GetUserDefaultLocaleNamefestgelegt wird. - Wenn die von der DefaultThreadCurrentCulture Eigenschaft definierte aktuelle Threadkultur der aktuellen Windows-Systemkultur entspricht.
- Wenn die aktuelle Threadkultur explizit auf eine kultur festgelegt wird, die von der CreateSpecificCulture Methode zurückgegeben wird und diese Kultur der aktuellen Windows-Systemkultur entspricht.
- Wenn die aktuelle Threadkultur explizit auf eine vom Konstruktor instanziierte CultureInfo(String) Kultur festgelegt wird und diese Kultur der aktuellen Windows-Systemkultur entspricht.
In einigen Fällen, insbesondere für 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, das Benutzerüberschreibungen nicht widerspiegelt, auf folgende Weise festlegen:
- Durch Aufrufen des CultureInfo(String, Boolean)-Konstruktors mit einem Wert von
falsefür dasuseUserOverride-Argument. - Durch Aufrufen der GetCultureInfo Methode, die ein zwischengespeichertes, schreibgeschütztes CultureInfo Objekt zurückgibt.