CultureInfo.CurrentCulture Egenskap
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Hämtar eller anger det CultureInfo objekt som representerar den kultur som används av den aktuella tråden och uppgiftsbaserade asynkrona åtgärder.
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
Egenskapsvärde
Den kultur som används av den aktuella tråden och uppgiftsbaserade asynkrona åtgärder.
Undantag
Egenskapen är inställd på null.
Exempel
I följande exempel visas hur du ändrar CurrentCulture och CurrentUICulture för den aktuella tråden.
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.
Kommentarer
Objektet CultureInfo som returneras av CurrentCulture egenskapen och dess associerade objekt avgör standardformatet för datum, tider, tal och valutavärden, sorteringsordningen för text, höljekonventioner och strängjämförelser.
Den aktuella kulturen är en egenskap för den exekverande tråden. När du anger den här egenskapen till ett CultureInfo objekt som representerar en ny kultur ändras även värdet för Thread.CurrentThread.CurrentCulture egenskapen. Vi rekommenderar dock att du alltid använder egenskapen CultureInfo.CurrentCulture för att hämta och ange den aktuella kulturen.
Objektet CultureInfo som den här egenskapen returnerar är skrivskyddat. Det innebär att du inte kan ändra det befintliga objektet, till exempel genom att ändra DateTimeFormat. Om du vill ändra datum-tid-formatet eller någon annan aspekt av den aktuella kulturen skapar du ett nytt CultureInfo objekt och tilldelar det till egenskapen.
Hur en tråds kultur fastställs
När en tråd startas bestäms dess kultur inledningsvis enligt följande:
Genom att hämta kulturen som anges av DefaultThreadCurrentCulture-egenskapen i den programdomän som tråden kör i, om egenskapsvärdet inte är
null.Om tråden är en trådpoolstråd som kör en uppgiftsbaserad asynkron operation bestäms dess kulturella miljö av den anropande trådens kulturella miljö. I följande exempel ändras den aktuella kulturen till portugisiska (Brasilien) och sex aktiviteter startas, där var och en visar sitt tråd-ID, sitt aktivitets-ID och sin aktuella kultur. Var och en av uppgifterna (och trådarna) har ärvt kulturen i den anropande tråden.
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-BRMer information finns i Kultur och aktivitetsbaserade asynkrona åtgärder.
Genom att anropa
GetUserDefaultLocaleNamefunktionen i Windows elleruloc_getDefaultfunktionen från ICU, som för närvarande anropar POSIX-funktionensetlocalemed kategorinLC_MESSAGES, i Unix-liknande system.
Observera att om du anger en specifik kultur som skiljer sig från den systeminstallerade kulturen eller användarens föredragna kultur, och programmet startar flera trådar, är den aktuella kulturen i dessa trådar den kultur som returneras av GetUserDefaultLocaleName funktionen, såvida du inte tilldelar en kultur till DefaultThreadCurrentCulture egenskapen i programdomänen där tråden körs.
Mer information om hur en tråds kultur bestäms finns i avsnittet "Kultur och trådar" på CultureInfo referenssidan.
Hämta den aktuella kulturen
Egenskapen CultureInfo.CurrentCulture är en inställning per tråd. Varje tråd kan ha sin egen kultur. Du får kulturen i den aktuella tråden genom att hämta värdet för CultureInfo.CurrentCulture egenskapen, vilket visas i följande exempel.
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]
Ange egenskapen CurrentCulture explicit
Om du vill ändra kulturen som används av en befintlig tråd anger du egenskapen CultureInfo.CurrentCulture till den nya kulturen. I följande exempel ändras den aktuella trådkulturen till nederländska (Nederländerna).
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
För att ändra kulturen med hjälp av egenskapen CultureInfo.CurrentCulture krävs en behörighet SecurityPermission med inställt värde ControlThread. Det är farligt att manipulera trådar på grund av det säkerhetstillstånd som är associerat med trådar. Därför bör den här behörigheten endast ges till tillförlitlig kod och sedan endast efter behov. Du kan inte ändra trådkulturen i halvbetrodd kod.
Du kan uttryckligen ändra den aktuella trådkulturen till antingen en specifik kultur (till exempel franska (Kanada)) eller en neutral kultur (till exempel franska). När ett CultureInfo objekt representerar en neutral kultur återspeglar värdena CultureInfo för egenskaper som Calendar, CompareInfo, DateTimeFormat, NumberFormatoch TextInfo den specifika kultur som är associerad med den neutrala kulturen. Till exempel är den dominerande kulturen för den engelska neutrala kulturen engelska (USA); den framträdande kulturen för den tyska kulturen är tyska (Tyskland). I följande exempel visas skillnaden i formatering när den aktuella kulturen är inställd på en specifik kultur, franska (Kanada) och en neutral kultur, franska.
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 €
Den aktuella kulturen och användarinställningar
Med Windows kan användare åsidosätta standardegenskapsvärdena för CultureInfo objektet och dess associerade objekt med hjälp av nationella alternativ och språkalternativ i Kontrollpanelen. Egenskapen CultureInfo returnerar objektet CurrentCulture, som återspeglar dessa användaråsidosättningar i följande fall:
- Om den aktuella trådkulturen anges implicit av Windows-funktionen
GetUserDefaultLocaleName. - Om den aktuella trådkulturen som definieras av DefaultThreadCurrentCulture egenskapen motsvarar den aktuella Windows-systemkulturen.
- Om den aktuella trådkulturen uttryckligen anges till en kultur som returneras av CreateSpecificCulture metoden, och den kulturen motsvarar den aktuella Windows-systemkulturen.
- Om den aktuella trådkulturen uttryckligen anges till en kultur som initieras av CultureInfo(String) konstruktorn och den kulturen motsvarar den aktuella Windows-systemkulturen.
I vissa fall, särskilt för serverprogram, kan det vara oönskat att ställa in den aktuella kulturen till en typ av CultureInfo-objekt som återspeglar användarens egna inställningar. Istället kan du ange den aktuella kulturen till ett CultureInfo objekt som inte återspeglar användaråsidosättningar på följande sätt:
- Genom att anropa CultureInfo(String, Boolean)-konstruktorn med värdet
falseföruseUserOverrideargumentet. - Genom att anropa GetCultureInfo metoden, som returnerar ett cachelagrat, skrivskyddat CultureInfo objekt.