CultureInfo.CurrentCulture Eigenschap
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Hiermee wordt het CultureInfo object opgehaald of ingesteld dat de cultuur vertegenwoordigt die wordt gebruikt door de huidige thread en asynchrone bewerkingen op basis van taken.
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
Waarde van eigenschap
De cultuur die wordt gebruikt door de huidige thread en op taken gebaseerde asynchrone bewerkingen.
Uitzonderingen
De eigenschap is ingesteld op null.
Voorbeelden
In het volgende voorbeeld ziet u hoe u de CurrentCulture ene CurrentUICulture thread wijzigt.
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.
Opmerkingen
Het CultureInfo object dat wordt geretourneerd door de CurrentCulture eigenschap en de bijbehorende objecten bepaalt de standaardnotatie voor datums, tijden, getallen en valutawaarden, de sorteervolgorde van tekst, hoofdletterconventies en tekenreeksvergelijkingen.
De huidige cultuur is een eigenschap van de uitvoerende thread. Wanneer u deze eigenschap instelt op een CultureInfo object dat een nieuwe cultuur vertegenwoordigt, wordt de waarde van de Thread.CurrentThread.CurrentCulture eigenschap ook gewijzigd. We raden u echter aan altijd de CultureInfo.CurrentCulture-eigenschap te gebruiken om de huidige cultuur op te halen en in te stellen.
Het CultureInfo object dat door deze eigenschap wordt geretourneerd, heeft het kenmerk Alleen-lezen. Dat betekent dat u het bestaande object niet kunt wijzigen, bijvoorbeeld door het DateTimeFormat te wijzigen. Als u de datum-tijdnotatie of een ander aspect van de huidige cultuur wilt wijzigen, maakt u een nieuw CultureInfo object en wijst u dit toe aan de eigenschap.
Hoe de cultuur van een discussie-thread wordt bepaald
Wanneer een thread wordt gestart, wordt de cultuur als volgt bepaald:
Door de cultuur op te halen die is opgegeven door de eigenschap DefaultThreadCurrentCulture in het toepassingsdomein waarin de thread wordt uitgevoerd, als de eigenschapswaarde niet
nullis.Als de thread een threadgroep is die een asynchrone bewerking op basis van een taak uitvoert, wordt de cultuur bepaald door de cultuur van de aanroepende thread. In het volgende voorbeeld wordt de huidige cultuur gewijzigd in Portugees (Brazilië) en worden zes taken gestart, die elk de thread-id, de taak-id en de huidige cultuur weergeven. Elk van de taken (en de threads) heeft de cultuur van de aanroepende thread overgenomen.
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-BRZie Asynchrone bewerkingen op basis van cultuur en taken voor meer informatie.
Door de
GetUserDefaultLocaleNamefunctie aan te roepen in Windows of deuloc_getDefaultfunctie van ICU, die momenteel de POSIX-functiesetlocalemet categorieLC_MESSAGESaanroept, op Unix-achtige systemen.
Houd er rekening mee dat als u een specifieke cultuur instelt die verschilt van de door het systeem geïnstalleerde cultuur of de voorkeurscultuur van de gebruiker en uw toepassing meerdere threads start, de huidige cultuur van deze threads de cultuur is die wordt geretourneerd door de GetUserDefaultLocaleName functie, tenzij u een cultuur toewijst aan de DefaultThreadCurrentCulture eigenschap in het toepassingsdomein waarin de thread wordt uitgevoerd.
Zie de sectie Cultuur en threads op de CultureInfo referentiepagina voor meer informatie over hoe de cultuur van een thread wordt bepaald.
De huidige cultuur ophalen
De CultureInfo.CurrentCulture eigenschap is een instelling per thread, dat wil zeggen dat elke thread een eigen cultuur kan hebben. U krijgt de cultuur van de huidige thread door de waarde van de CultureInfo.CurrentCulture eigenschap op te halen, zoals in het volgende voorbeeld wordt geïllustreerd.
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]
De eigenschap CurrentCulture expliciet instellen
Als u de cultuur wilt wijzigen die wordt gebruikt door een bestaande thread, stelt u de CultureInfo.CurrentCulture eigenschap in op de nieuwe cultuur. In het volgende voorbeeld wordt de huidige thread-cultuur gewijzigd in Nederlands (Nederland).
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
Opmerking
Voor het wijzigen van de cultuur met behulp van de CultureInfo.CurrentCulture eigenschap is een SecurityPermission machtiging met de ControlThread waardeset vereist. Het bewerken van threads is gevaarlijk vanwege de beveiligingsstatus die is gekoppeld aan threads. Daarom moet deze machtiging alleen worden verleend aan betrouwbare code en vervolgens alleen indien nodig. U kunt de threadcultuur niet wijzigen in semi-vertrouwde code.
U kunt de huidige threadcultuur expliciet wijzigen in een specifieke cultuur (zoals Frans (Canada)) of een neutrale cultuur (zoals Frans). Wanneer een CultureInfo object een neutrale cultuur vertegenwoordigt, weerspiegelen de waarden van CultureInfo eigenschappen zoals Calendar, CompareInfo, DateTimeFormaten NumberFormatTextInfo weerspiegelen de specifieke cultuur die aan de neutrale cultuur is gekoppeld. De dominante cultuur voor de Engelse neutrale cultuur is bijvoorbeeld Engels (Verenigde Staten); de dominante cultuur voor de Duitse cultuur is Duits (Duitsland). In het volgende voorbeeld ziet u het verschil in opmaak wanneer de huidige cultuur is ingesteld op een specifieke cultuur, Frans (Canada) en een neutrale cultuur, Frans.
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 €
De huidige cultuur en gebruikersoverschrijvingen
Met Windows kunnen gebruikers de standaardeigenschapswaarden van het CultureInfo object en de bijbehorende objecten overschrijven met behulp van landinstellingen en taalopties in het Configuratiescherm. Het CultureInfo object dat door de CurrentCulture eigenschap wordt geretourneerd, weerspiegelt deze gebruikersoverschrijvingen in de volgende gevallen:
- Als de huidige threadcultuur impliciet wordt ingesteld door de Windows-functie
GetUserDefaultLocaleName. - Als de huidige threadcultuur die door de DefaultThreadCurrentCulture eigenschap is gedefinieerd, overeenkomt met de huidige Windows-systeemcultuur.
- Als de huidige threadcultuur expliciet is ingesteld op een cultuur die door de CreateSpecificCulture methode wordt geretourneerd en die cultuur overeenkomt met de huidige Windows-systeemcultuur.
- Als de huidige threadcultuur expliciet is ingesteld op een cultuur die door de CultureInfo(String) constructor wordt geïnstantieerd en die cultuur overeenkomt met de huidige Windows-systeemcultuur.
In sommige gevallen, met name voor servertoepassingen, kan het instellen van de huidige cultuur op een CultureInfo object dat gebruikersoverschrijvingen weerspiegelt, ongewenst zijn. In plaats daarvan kunt u de huidige cultuur instellen op een CultureInfo object dat gebruikers wijzigen niet weergeeft op de volgende manieren:
- Door de CultureInfo(String, Boolean) constructor aan te roepen met een waarde van
falseals het argument vooruseUserOverride. - Door de GetCultureInfo methode aan te roepen, die een alleen-lezen CultureInfo object retourneert dat al in de cache is opgeslagen.