CultureInfo.CurrentCulture Propriété
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Obtient ou définit l’objet CultureInfo qui représente la culture utilisée par les opérations asynchrones basées sur les tâches et le thread actuel.
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
Valeur de propriété
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 thread actuel et CurrentCulture comment le CurrentUICulture modifier.
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.
Remarques
L’objet CultureInfo retourné par la propriété CurrentCulture et ses objets associés détermine le format par défaut pour les dates, les heures, les nombres et les valeurs monétaires, l’ordre de tri du texte, les conventions de casse et les comparaisons de chaînes.
La culture actuelle est une propriété du thread en cours d’exécution. Lorsque vous définissez cette propriété sur 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 propriété CultureInfo.CurrentCulture pour récupérer et définir la culture actuelle.
L’objet CultureInfo 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 date-heure ou un autre aspect de la culture actuelle, créez un CultureInfo objet et affectez-le à la propriété.
Détermination de la culture d’un thread
Lorsqu’un thread est démarré, sa culture est initialement déterminée comme suit :
En récupérant 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 qui effectue une opération asynchrone basée sur des tâches, sa culture est déterminée par celle 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.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-BRPour plus d’informations, consultez Les opérations asynchrones basées sur la culture et les tâches.
En appelant la fonction
GetUserDefaultLocaleNamesur Windows ou la fonctionuloc_getDefaultà partir de ICU, qui appelle actuellement la fonction POSIXsetlocaleavec la catégorieLC_MESSAGES, sur les systèmes de type Unix.
Notez que si vous définissez une culture spécifique 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 est la culture retournée par la GetUserDefaultLocaleName fonction, sauf si vous attribuez 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.
Obtenir la culture actuelle
La CultureInfo.CurrentCulture propriété est un paramètre par thread ; autrement dit, chaque thread peut avoir sa propre culture. Pour obtenir la culture actuelle du thread, il faut récupérer la valeur de la propriété CultureInfo.CurrentCulture, comme le montre l’exemple suivant.
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]
Définir explicitement la propriété CurrentCulture
Pour modifier la culture utilisée par un thread existant, vous définissez la CultureInfo.CurrentCulture propriété sur la nouvelle culture. Dans l’exemple suivant la culture actuelle du thread change pour le néerlandais (Pays-Bas).
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
Le changement de la culture à l’aide de la propriété CultureInfo.CurrentCulture nécessite une autorisation SecurityPermission avec la valeur ControlThread définie. La manipulation de 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 changer la culture du thread dans du code semi-approuvé.
Vous pouvez modifier explicitement la culture du thread actuel en une culture spécifique (comme le Français (Canada)) ou une culture neutre (par exemple, française). Lorsqu’un CultureInfo objet représente une culture neutre, les valeurs des CultureInfo propriétés telles que Calendar, , CompareInfo, DateTimeFormat, NumberFormatet TextInfo reflètent la culture spécifique associée à la culture neutre. Par exemple, la culture dominante pour la culture neutre anglaise est l’anglais (États-Unis) ; la culture dominante pour la culture allemande est allemande (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çaise (Canada) et une culture neutre, française.
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 €
La culture actuelle et les remplacements de l’utilisateur
Windows permet aux utilisateurs de remplacer les valeurs de propriété standard de l’objet CultureInfo et de ses objets associés à l’aide des options régionales et linguistiques dans le Panneau de configuration. L’objet CultureInfo retourné par la CurrentCulture propriété reflète ces remplacements par les utilisateurs dans les cas suivants :
- Si la culture de thread actuelle est définie implicitement par la fonction Windows
GetUserDefaultLocaleName. - Si la culture de thread actuelle définie par la DefaultThreadCurrentCulture propriété correspond à la culture système Windows actuelle.
- Si la culture actuelle du thread est définie explicitement sur une culture retournée par la méthode CreateSpecificCulture, et que cette culture correspond à la culture système Windows actuelle.
- Si la culture actuelle du thread est définie explicitement sur une culture instanciée par le constructeur CultureInfo(String), et que cette culture correspond à la culture système Windows actuelle.
Dans certains cas, en particulier pour les applications serveur, définir la culture actuelle sur un objet CultureInfo qui reflète les modifications utilisateur peut être indésirable. Au lieu de cela, vous pouvez définir la culture actuelle sur un objet CultureInfo qui ne reflète pas les modifications de l'utilisateur de la manière suivante :
- En appelant le constructeur CultureInfo(String, Boolean) avec une valeur de
falsepour l’argumentuseUserOverride. - En appelant la GetCultureInfo méthode, qui retourne un objet en lecture seule CultureInfo mis en cache.