CultureInfo.DefaultThreadCurrentUICulture Propriedade
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Obtém ou define a cultura de interface padrão para threads no domínio de aplicação atual.
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; }
static member DefaultThreadCurrentUICulture : System.Globalization.CultureInfo with get, set
Public Shared Property DefaultThreadCurrentUICulture As CultureInfo
Valor de Propriedade
A cultura de UI padrão para threads no domínio de aplicação atual, ou null se a cultura de UI do sistema atual for a cultura de UI de threads padrão no domínio de aplicação.
Exceções
Numa operação conjunta, o valor da Name propriedade é inválido.
Exemplos
O exemplo seguinte ilustra o comportamento padrão do .NET na definição da cultura atual de uma nova thread. Utiliza recursos em inglês e russo. O seguinte ficheiro de texto denominado GreetingStrings.txt contém os recursos da língua inglesa:
greeting =Hello again!
newGreeting=Hello!
É compilado para um ficheiro binário .resources chamado GreetingStrings.resources usando o Gerador de Ficheiros de Recursos com o seguinte comando.
resgen greetingstrings.txt
O seguinte ficheiro de texto denominado GreetingStrings.ru-RU.txt contém os recursos em língua russa:
greeting=Еще раз привет!
newGreeting=Привет!
É compilado para um ficheiro binário .resources chamado GreetingStrings.ru-RU.resources usando o Gerador de Ficheiros de Recursos com o seguinte comando.
resgen greetingstrings.ru-RU.txt
O código da aplicação, mostrado abaixo, reside num ficheiro chamado Example1.vb ou Example1.cs. É compilado para um executável usando o seguinte comando para o compilador Visual Basic:
vbc Example1.vb /resource:GreetingStrings.resources
Para o compilador C#, o comando é semelhante:
csc /resource:GreetingStrings.resources Example1.cs
Isto cria um assembly que inclui o código executável do exemplo juntamente com os recursos para a sua cultura de reserva. Também pode usar o Assembly Linker para criar o ficheiro de recurso para a cultura russa (Rússia) com o seguinte comando:
>al /embed:greetingstrings.ru-RU.resources /c:ru-RU /template:example1.exe /out:ru-RU\Example1.resources.dll
No início, o exemplo define a cultura atual e a cultura atual da interface como russa (Rússia) em todos os sistemas, exceto naqueles em que a cultura padrão do sistema já é russa (Rússia). Se a cultura padrão do sistema já for russa (Rússia), o código define a cultura atual e a cultura atual da interface para inglês (Estados Unidos). Depois, chama a ShowGreeting rotina, que apresenta uma cadeia simples na primeira vez que é chamada e uma cadeia ligeiramente diferente nas chamadas de método seguintes. De seguida, cria um novo thread, que também executa a ShowGreeting rotina.
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!
Como mostra a saída do exemplo, quando o exemplo é executado num computador cuja cultura do sistema é inglesa (Estados Unidos), o thread principal apresenta a sua cadeia inicial em russo. No entanto, como a cultura da thread de trabalho deriva da cultura do sistema Windows atual e não da cultura da aplicação, a thread de trabalho apresenta a sua cadeia em inglês.
O exemplo seguinte utiliza as DefaultThreadCurrentCulture propriedades e DefaultThreadCurrentUICulture para definir a cultura atual e a cultura atual da interface de utilizador de uma nova thread de aplicação.
O exemplo utiliza os mesmos ficheiros de recursos do exemplo anterior. Os comandos para compilar e incorporar os recursos localizados em russo numa assembly de satélite também são idênticos, exceto que o nome da assembly executável muda.
No início, o exemplo define a cultura atual e a cultura atual da interface como russa (Rússia) em todos os sistemas, exceto naqueles em que a cultura padrão do sistema já é russa (Rússia). Se a cultura do sistema por defeito já for russa (Rússia), define a cultura atual e a cultura UI atual para inglês (Estados Unidos). Depois, chama a ShowGreeting rotina, que apresenta uma cadeia simples na primeira vez que é chamada e uma cadeia ligeiramente diferente nas chamadas de método seguintes. De seguida, cria um novo thread, que também executa a ShowGreeting rotina.
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:
' Привет!
' Еще раз привет!
Como a saída do exemplo mostra, quando o exemplo é executado num computador cuja cultura do sistema é inglesa (Estados Unidos), tanto o thread principal como o worker thread exibem as suas cadeias na língua russa.
Observações
No .NET Framework 4 e versões anteriores, por defeito, a cultura da interface de todos os threads está definida para a cultura do sistema Windows. Para aplicações cuja cultura atual de interface difere da cultura padrão do sistema, este comportamento é frequentemente indesejável. No .NET Framework 4.5+, a propriedade DefaultThreadCurrentUICulture permite-lhe definir a cultura de interface padrão de todos os threads num domínio de aplicação.
Importante
Se não definiu explicitamente a cultura da interface de quaisquer threads existentes a executar num domínio de aplicação, definir a DefaultThreadCurrentUICulture propriedade também altera a cultura desses threads. No entanto, se estas threads são executadas noutro domínio de aplicação, a sua cultura é definida pela DefaultThreadCurrentUICulture propriedade nesse domínio de aplicação ou, se não houver valor padrão definido, pela cultura do sistema padrão. Por isso, recomendamos que defina sempre explicitamente a cultura do seu thread principal de aplicação e que não dependa dessa DefaultThreadCurrentUICulture propriedade para definir a cultura do thread principal da aplicação.
A menos que seja definida explicitamente, o valor da propriedade DefaultThreadCurrentUICulture é null, e a cultura atual de todas as threads num domínio de aplicação que não receberam uma cultura explícita é definida pela cultura Windows sistema padrão.
Para mais informações sobre culturas, threads e domínios de aplicação, consulte as secções "Cultura e threads" e "Cultura e domínios de aplicação" de CultureInfo.