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; }
member this.DefaultThreadCurrentUICulture : System.Globalization.CultureInfo with get, set
Public Shared Property DefaultThreadCurrentUICulture As CultureInfo

Valeur de propriété

CultureInfo

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 de la .NET Framework dans la définition de la culture actuelle d’un nouveau thread. Il utilise les ressources de langue anglaise et russe. Le fichier texte suivant nommé GreetingStrings.txt contient les ressources en 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 de langue 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 d’application, qui est illustré ci-dessous, réside dans un fichier nommé example1. vb ou example1. cs. il est compilé en un fichier 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 comprend 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) à l’aide de 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 d’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 d’interface utilisateur actuelle en anglais (États-Unis). Elle 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 sur les appels de méthode suivants. Ensuite, il crée un nouveau 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, quand l’exemple est exécuté sur un ordinateur dont la culture système est l’anglais (États-Unis), le thread principal 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 actuelle Windows 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 DefaultThreadCurrentUICulture Propriétés et 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 d’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 d’interface utilisateur actuelle sur l’anglais (États-Unis). Elle 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 sur les appels de méthode suivants. Ensuite, il crée un nouveau 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, quand l’exemple est exécuté sur un ordinateur dont la culture système est l’anglais (États-Unis), le thread principal et le thread de travail affichent leurs chaînes en russe.

Remarques

dans les versions .NET Framework 4 et précédentes, par défaut, la culture d’interface utilisateur de tous les threads est définie sur la culture du 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 est souvent indésirable. dans la .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 dans un domaine d’application.

Important

Si vous n’avez pas défini explicitement la culture d’interface utilisateur des threads existants s’exécutant dans un domaine d’application, la définition DefaultThreadCurrentUICulture de la 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 principal et de ne pas compter sur la DefaultThreadCurrentUICulture propriété pour définir la culture du thread d’application principal.

à moins qu’il ne soit défini explicitement, la valeur de la DefaultThreadCurrentUICulture propriété est null , et la culture actuelle de tous les threads d’un domaine d’application auxquels aucune culture explicite n’a été affectée est définie par la culture système par défaut Windows.

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

S’applique à

Voir aussi