CultureInfo.DefaultThreadCurrentUICulture 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 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.