Partager via


CultureInfo.DefaultThreadCurrentUICulture Propriété

Définition

Obtient ou définit la culture de l'interface utilisateur par défaut pour les threads dans le domaine d'application actuel.

public:
 static property System::Globalization::CultureInfo ^ DefaultThreadCurrentUICulture { System::Globalization::CultureInfo ^ get(); void set(System::Globalization::CultureInfo ^ value); };
public static System.Globalization.CultureInfo DefaultThreadCurrentUICulture { get; set; }
public static System.Globalization.CultureInfo? DefaultThreadCurrentUICulture { get; set; }
static member DefaultThreadCurrentUICulture : System.Globalization.CultureInfo with get, set
Public Shared Property DefaultThreadCurrentUICulture As CultureInfo

Valeur de propriété

Culture de l'interface utilisateur par défaut pour les threads dans le domaine d'application actuel, ou null si la culture de l'interface utilisateur du système actuelle est la culture de l'interface utilisateur du thread par défaut dans le domaine d'application.

Exceptions

Dans une opération ensembliste, la valeur de propriété Name n’est pas valide.

Exemples

L’exemple suivant illustre le comportement par défaut du .NET Framework dans la définition de la culture actuelle d’un nouveau thread. Il utilise des ressources en anglais et en russe. Le fichier texte suivant nommé GreetingStrings.txt contient les ressources de langue anglaise :

greeting =Hello again!
newGreeting=Hello!

Il est compilé dans un fichier .resources binaire nommé GreetingStrings.resources à l’aide du générateur de fichiers de ressources avec la commande suivante.

resgen greetingstrings.txt

Le fichier texte suivant nommé GreetingStrings.ru-RU.txt contient les ressources en russe :

greeting=Еще раз привет!
newGreeting=Привет!

Il est compilé dans un fichier .resources binaire nommé GreetingStrings.ru-RU.resources à l’aide du générateur de fichiers de ressources avec la commande suivante.

resgen greetingstrings.ru-RU.txt

Le code de l’application, illustré ci-dessous, réside dans un fichier nommé Example1.vb ou Example1.cs. Il est compilé dans un exécutable à l’aide de la commande suivante pour le compilateur Visual Basic :

vbc Example1.vb /resource:GreetingStrings.resources

Pour le compilateur C#, la commande est similaire :

csc /resource:GreetingStrings.resources Example1.cs

Cela crée un assembly qui inclut le code exécutable de l’exemple ainsi que les ressources pour sa culture de secours. Vous pouvez également utiliser Assembly Linker pour créer le fichier de ressources pour la culture russe (Russie) avec la commande suivante :

>al /embed:greetingstrings.ru-RU.resources /c:ru-RU /template:example1.exe /out:ru-RU\Example1.resources.dll

Au démarrage, l’exemple définit la culture actuelle et la culture de l’interface utilisateur actuelle sur russe (Russie) sur tous les systèmes à l’exception de ceux sur lesquels la culture système par défaut est déjà russe (Russie). Si la culture système par défaut est déjà russe (Russie), le code définit la culture actuelle et la culture de l’interface utilisateur actuelle sur anglais (États-Unis). Il appelle ensuite la ShowGreeting routine, qui affiche une chaîne simple la première fois qu’elle est appelée et une chaîne légèrement différente lors des appels de méthode suivants. Ensuite, il crée un thread, qui exécute également la ShowGreeting routine.

using System;
using System.Globalization;
using System.Reflection;
using System.Resources;
using System.Threading;

[assembly:NeutralResourcesLanguageAttribute("en-US")]

public class Example
{
   private static int nGreetings = 0;
   private static ResourceManager rm;

   public static void Main()
   {
      AppDomain domain = AppDomain.CurrentDomain;
      rm = new ResourceManager("GreetingStrings",
                               typeof(Example).Assembly);

      CultureInfo culture = null;
      if (Thread.CurrentThread.CurrentUICulture.Name == "ru-RU")
         culture = CultureInfo.CreateSpecificCulture("en-US");
      else
         culture = CultureInfo.CreateSpecificCulture("ru-RU");

      Thread.CurrentThread.CurrentCulture = culture;
      Thread.CurrentThread.CurrentUICulture = culture;

      ShowGreeting();
      Thread.Sleep(1000);

      Thread workerThread = new Thread(Example.ShowGreeting);
      workerThread.Start();
   }

   private static void ShowGreeting()
   {
      string greeting = nGreetings == 0 ? rm.GetString("newGreeting") :
                                          rm.GetString("greeting");
      nGreetings++;
      Console.WriteLine("{0}", greeting);
   }
}
// The example displays the following output:
//       Привет!
//       Hello again!
Imports System.Globalization
Imports System.Reflection
Imports System.Resources
Imports System.Threading

<Assembly:NeutralResourcesLanguageAttribute("en-US")>

Public Class Example
   Private Shared nGreetings As Integer = 0
   Private Shared rm As ResourceManager

   Public Shared Sub Main()
      Dim domain As AppDomain = AppDomain.CurrentDomain
      rm = New ResourceManager("GreetingStrings", 
                               GetType(Example).Assembly)
                  
      Dim culture As CultureInfo = Nothing
      If Thread.CurrentThread.CurrentUICulture.Name = "ru-RU" Then
         culture = CultureInfo.CreateSpecificCulture("en-US")
      Else
         culture = CultureInfo.CreateSpecificCulture("ru-RU")
      End If   
      Thread.CurrentThread.CurrentCulture = culture
      Thread.CurrentThread.CurrentUICulture = culture

      ShowGreeting()
      Thread.Sleep(1000)

      Dim workerThread As New Thread(AddressOf Example.ShowGreeting)
      workerThread.Start()
   End Sub
   
   Private Shared Sub ShowGreeting()
      Dim greeting As String = CStr(IIf(nGreetings = 0, 
                                        rm.GetString("newGreeting"),
                                        rm.GetString("greeting")))
      nGreetings += 1
      Console.WriteLine("{0}", greeting)   
   End Sub
End Class
' The example displays the following output:
'       Привет!
'       Hello again!

Comme le montre la sortie de l’exemple, lorsque l’exemple est exécuté sur un ordinateur dont la culture système est l’anglais (États-Unis), le thread main affiche sa chaîne initiale en russe. Toutefois, étant donné que la culture du thread de travail est dérivée de la culture système Windows actuelle plutôt que de la culture actuelle de l’application, le thread de travail affiche sa chaîne en anglais.

L’exemple suivant utilise les DefaultThreadCurrentCulture propriétés et DefaultThreadCurrentUICulture pour définir la culture actuelle et la culture d’interface utilisateur actuelle d’un nouveau thread d’application.

L’exemple utilise les mêmes fichiers de ressources que l’exemple précédent. Les commandes permettant de compiler et d’incorporer les ressources de langue russe localisées dans un assembly satellite sont également identiques, sauf que le nom de l’assembly exécutable change.

Au démarrage, l’exemple définit la culture actuelle et la culture de l’interface utilisateur actuelle sur russe (Russie) sur tous les systèmes à l’exception de ceux sur lesquels la culture système par défaut est déjà russe (Russie). Si la culture système par défaut est déjà russe (Russie), elle définit la culture actuelle et la culture de l’interface utilisateur actuelle en anglais (États-Unis). Il appelle ensuite la ShowGreeting routine, qui affiche une chaîne simple la première fois qu’elle est appelée et une chaîne légèrement différente lors des appels de méthode suivants. Ensuite, il crée un thread, qui exécute également la ShowGreeting routine.

using System;
using System.Globalization;
using System.Reflection;
using System.Resources;
using System.Threading;

[assembly:NeutralResourcesLanguageAttribute("en-US")]

public class Example
{
   private static int nGreetings = 0;
   private static ResourceManager rm;

   public static void Main()
   {
      AppDomain domain = AppDomain.CurrentDomain;
      rm = new ResourceManager("GreetingStrings",
                               typeof(Example).Assembly);

      CultureInfo culture = null;
      if (Thread.CurrentThread.CurrentUICulture.Name == "ru-RU")
         culture = CultureInfo.CreateSpecificCulture("en-US");
      else
         culture = CultureInfo.CreateSpecificCulture("ru-RU");

      CultureInfo.DefaultThreadCurrentCulture = culture;
      CultureInfo.DefaultThreadCurrentUICulture = culture;

      Thread.CurrentThread.CurrentCulture = culture;
      Thread.CurrentThread.CurrentUICulture = culture;

      ShowGreeting();
      Thread.Sleep(1000);

      Thread workerThread = new Thread(Example.ShowGreeting);
      workerThread.Start();
   }

   private static void ShowGreeting()
   {
      string greeting = nGreetings == 0 ? rm.GetString("newGreeting") :
                                          rm.GetString("greeting");
      nGreetings++;
      Console.WriteLine("{0}", greeting);
   }
}
// The example displays the following output:
//       Привет!
//       Еще раз привет!
Imports System.Globalization
Imports System.Reflection
Imports System.Resources
Imports System.Threading

<Assembly:NeutralResourcesLanguageAttribute("en-US")>

Public Class Example
   Private Shared nGreetings As Integer = 0
   Private Shared rm As ResourceManager

   Public Shared Sub Main()
      Dim domain As AppDomain = AppDomain.CurrentDomain
      rm = New ResourceManager("GreetingStrings", 
                               GetType(Example).Assembly)
                  
      Dim culture As CultureInfo = Nothing
      If Thread.CurrentThread.CurrentUICulture.Name = "ru-RU" Then
         culture = CultureInfo.CreateSpecificCulture("en-US")
      Else
         culture = CultureInfo.CreateSpecificCulture("ru-RU")
      End If   
      CultureInfo.DefaultThreadCurrentCulture = culture
      CultureInfo.DefaultThreadCurrentUICulture = culture
       
      Thread.CurrentThread.CurrentCulture = culture
      Thread.CurrentThread.CurrentUICulture = culture

      ShowGreeting()
      Thread.Sleep(1000)

      Dim workerThread As New Thread(AddressOf Example.ShowGreeting)
      workerThread.Start()
   End Sub
   
   Private Shared Sub ShowGreeting()
      Dim greeting As String = CStr(IIf(nGreetings = 0, 
                                        rm.GetString("newGreeting"),
                                        rm.GetString("greeting")))
      nGreetings += 1
      Console.WriteLine("{0}", greeting)   
   End Sub
End Class
' The example displays the following output:
'       Привет!
'       Еще раз привет!

Comme le montre la sortie de l’exemple, lorsque l’exemple est exécuté sur un ordinateur dont la culture système est l’anglais (États-Unis), le thread main et le thread de travail affichent leurs chaînes en russe.

Remarques

Dans .NET Framework 4 et les versions antérieures, par défaut, la culture de l’interface utilisateur de tous les threads est définie sur la culture système Windows. Pour les applications dont la culture d’interface utilisateur actuelle diffère de la culture système par défaut, ce comportement n’est souvent pas souhaitable. Dans .NET Framework 4.5, la DefaultThreadCurrentUICulture propriété vous permet de définir la culture d’interface utilisateur par défaut de tous les threads d’un domaine d’application.

Important

Si vous n’avez pas défini explicitement la culture de l’interface utilisateur des threads existants s’exécutant dans un domaine d’application, la définition de la DefaultThreadCurrentUICulture propriété modifie également la culture de ces threads. Toutefois, si ces threads s’exécutent dans un autre domaine d’application, leur culture est définie par la DefaultThreadCurrentUICulture propriété dans ce domaine d’application ou, si aucune valeur par défaut n’est définie, par la culture système par défaut. Pour cette raison, nous vous recommandons de toujours définir explicitement la culture de votre thread d’application main et de ne pas vous appuyer sur la DefaultThreadCurrentUICulture propriété pour définir la culture du thread d’application main.

Sauf si elle est définie explicitement, la valeur de la DefaultThreadCurrentUICulture propriété est null, et la culture actuelle de tous les threads d’un domaine d’application qui n’ont pas été affectés à une culture explicite est définie par la culture système Windows par défaut.

Pour plus d’informations sur les cultures, les threads et les domaines d’application, consultez les sections « Culture et threads » et « Domaines de culture et d’application » dans la CultureInfo page de référence.

S’applique à

Voir aussi