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.
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
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 vonuloc_getDefault
ICU,die derzeit die POSIX-Funktionsetlocale
mit der KategorieLC_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:
Durch Aufrufen des CultureInfo(String, Boolean) Konstruktors mit dem Wert
false
für dasuseUserOverride
Argument.Durch Aufrufen der GetCultureInfo -Methode, die ein zwischengespeichertes, schreibgeschütztes CultureInfo Objekt zurückgibt.
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.