CultureInfo.CurrentCulture Propriété

Définition

Obtient ou définit l' CultureInfo objet qui représente la culture utilisée par le thread actuel et les opérations asynchrones basées sur des tâches.

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

Valeur de propriété

CultureInfo

Culture utilisée par le thread actuel et les opérations asynchrones basées sur des tâches.

Exceptions

La propriété est définie sur null.

Exemples

L’exemple suivant montre comment modifier le CurrentCulture et le CurrentUICulture du thread actuel.

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.

Remarques

L' CultureInfo objet retourné par cette propriété et ses objets associés détermine le format par défaut des dates, des heures, des nombres, des valeurs monétaires, de l’ordre de tri du texte, des conventions de casse et des comparaisons de chaînes.

La culture actuelle est une propriété du thread en cours d’exécution. Lorsque vous affectez à cette propriété un CultureInfo objet qui représente une nouvelle culture, la valeur de la Thread.CurrentThread.CurrentCulture propriété change également. Toutefois, nous vous recommandons de toujours utiliser la CultureInfo.CurrentCulture propriété pour récupérer et définir la culture actuelle.

L' CultureInfo objet retourné par cette propriété est en lecture seule. Cela signifie que vous ne pouvez pas muter l’objet existant, par exemple, en modifiant le DateTimeFormat . Pour modifier le format de date et d’heure ou un autre aspect de la culture actuelle, créez un nouvel CultureInfo objet et affectez-le à la propriété.

Notes

dans .NET Framework 4.5.2 et les versions antérieures, la CultureInfo.CurrentCulture propriété est en lecture seule ; autrement dit, vous pouvez récupérer la valeur de la propriété, mais vous ne pouvez pas la définir.

Dans cette section :

Mode de détermination de la culture d’un thread
Obtient la culture actuelle
Définir explicitement la propriété CurrentCulture
Remplacements de l’utilisateur
Culture et applications de Windows

Mode de détermination de la culture d’un thread

Quand un thread est démarré, sa culture est initialement déterminée comme suit :

  • En extrayant la culture spécifiée par la DefaultThreadCurrentCulture propriété dans le domaine d’application dans lequel le thread s’exécute, si la valeur de la propriété n’est pas null .

  • si le thread est un thread de pool de threads qui exécute une opération asynchrone basée sur des tâches et que l’application cible le .NET Framework 4,6 ou une version ultérieure du .NET Framework, sa culture est déterminée par la culture du thread appelant. L’exemple suivant modifie la culture actuelle en Portugais (Brésil) et lance six tâches, chacune affichant son ID de thread, son ID de tâche et sa culture actuelle. Chacune des tâches (et les threads) a hérité de la culture du thread appelant.

    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
    

    Pour plus d’informations, consultez la section « culture et opérations asynchrones basées sur les tâches » dans la CultureInfo rubrique.

  • en appelant la GetUserDefaultLocaleName fonction sur Windows ou la uloc_getDefault fonction à partir d' ICU, qui appelle actuellement la setlocale fonction POSIX avec category LC_MESSAGES , sur des systèmes de type Unix.

Notez que si vous définissez une culture spécifique qui est différente de la culture installée par le système ou de la culture préférée de l’utilisateur, et que votre application démarre plusieurs threads, la culture actuelle de ces threads sera la culture retournée par la GetUserDefaultLocaleName fonction, sauf si vous assignez une culture à la DefaultThreadCurrentCulture propriété dans le domaine d’application dans lequel le thread s’exécute.

Pour plus d’informations sur la façon dont la culture d’un thread est déterminée, consultez la section « culture et threads » dans la CultureInfo page de référence.

Obtient la culture actuelle

La CultureInfo.CurrentCulture propriété est un paramètre par thread ; autrement dit, chaque thread peut avoir sa propre culture. Vous pouvez récupérer la culture du thread actuel en extrayant la valeur de la CultureInfo.CurrentCulture propriété, comme l’illustre l’exemple suivant.

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]

Définir explicitement la propriété CurrentCulture

Pour modifier la culture utilisée par un thread existant, vous affectez à la CultureInfo.CurrentCulture propriété la nouvelle culture. Si vous modifiez explicitement la culture d’un thread de cette manière, cette modification persiste si le thread franchit les limites du domaine d’application. L’exemple suivant modifie la culture actuelle du thread en Néerlandais (Pays-Bas). Il montre également que, lorsque le thread actuel traverse les limites du domaine d’application, sa culture actuelle reste modifiée.

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

Notes

La modification de la culture à l’aide de la CultureInfo.CurrentCulture propriété requiert une SecurityPermission autorisation avec la ControlThread valeur définie. La manipulation des threads est dangereuse en raison de l’état de sécurité associé aux threads. Par conséquent, cette autorisation doit être accordée uniquement au code fiable, puis uniquement si nécessaire. Vous ne pouvez pas modifier la culture d’un thread dans du code d’un point de confiance partiel.

à partir de .NET Framework 4, vous pouvez modifier explicitement la culture du thread actuel en une culture spécifique (par exemple, français (Canada)) ou une culture neutre (par exemple, le français). Lorsqu’un CultureInfo objet représente une culture neutre, les valeurs des CultureInfo propriétés telles que Calendar ,,, CompareInfo DateTimeFormat NumberFormat et TextInfo reflètent la culture spécifique associée à la culture neutre. Par exemple, la culture dominante pour la culture neutre en anglais est l’anglais (États-Unis); la culture dominante pour la culture allemande est l’allemand (Allemagne). L’exemple suivant illustre la différence de mise en forme lorsque la culture actuelle est définie sur une culture spécifique, français (Canada) et une culture neutre, français.

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 €

vous pouvez également utiliser la CultureInfo.CurrentCulture propriété avec la HttpRequest.UserLanguages propriété pour définir la CurrentCulture propriété d’une application ASP.NET sur la culture préférée de l’utilisateur, comme l’illustre l’exemple suivant.

CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.UserLanguages[0]);
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.UserLanguages(0))

La culture actuelle et les substitutions de l’utilisateur

Windows permet aux utilisateurs de remplacer les valeurs de propriété standard de l' CultureInfo objet et de ses objets associés à l’aide des Options régionales et linguistiques du panneau de configuration. L' CultureInfo objet retourné par la CurrentCulture propriété reflète ces substitutions d’utilisateur dans les cas suivants :

  • si la culture actuelle du thread est définie implicitement par la GetUserDefaultLocaleName fonction Windows.

  • si la culture de thread actuelle définie par la DefaultThreadCurrentCulture propriété correspond à la culture du système Windows en cours.

  • si la culture actuelle du thread est définie explicitement sur une culture retournée par la CreateSpecificCulture méthode, et que la culture correspond à la culture du système de Windows actuelle.

  • si la culture actuelle du thread est définie explicitement sur une culture instanciée par le CultureInfo(String) constructeur, et que la culture correspond à la culture système Windows actuelle.

Dans certains cas, en particulier pour les applications serveur, la définition de la culture actuelle sur un CultureInfo objet qui reflète les substitutions de l’utilisateur peut être indésirable. Au lieu de cela, vous pouvez définir la culture actuelle sur un CultureInfo objet qui ne reflète pas les substitutions de l’utilisateur des manières suivantes :

La culture actuelle et les applications UWP

dans les applications plateforme Windows universelle (UWP), la CurrentCulture propriété est en lecture-écriture, comme c’est le cas dans les applications .NET Framework et .net Core ; vous pouvez l’utiliser pour obtenir et définir la culture actuelle. Toutefois, les applications UWP ne font pas la distinction entre la culture actuelle et la culture d’interface utilisateur actuelle. Les CurrentCulture Propriétés et sont CurrentUICulture mappées à la première valeur de l' Windows. Collection ApplicationModel. resources. Core. ResourceManager. DefaultContext. Languages .

dans les applications .NET Framework et .net Core, la culture actuelle est un paramètre par thread, et la CurrentCulture propriété reflète la culture du thread actuel uniquement. Dans les applications UWP, la culture actuelle est mappée au Windows. Propriété ApplicationModel. resources. Core. ResourceManager. DefaultContext. Languages , qui est un paramètre global. La définition CurrentCulture de la propriété modifie la culture de l’application entière ; la culture ne peut pas être définie pour chaque thread.

S’applique à

Voir aussi