Taal

CultureInfo.CurrentCulture Eigenschap

Definitie

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-BR
    
    Imports 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-BR
    

    Zie Asynchrone bewerkingen op basis van cultuur en taken voor meer informatie.

  • Door de GetUserDefaultLocaleName functie aan te roepen in Windows of de uloc_getDefault functie van ICU, die momenteel de POSIX-functie setlocale met categorie LC_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:

Van toepassing op

Zie ook