Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Observação
Este artigo fornece observações complementares à documentação de referência para esta API.
A propriedade CurrentUICulture é uma propriedade por thread. Ou seja, cada thread tem sua própria cultura de interface do usuário atual. Essa propriedade é equivalente a recuperar ou definir o CultureInfo objeto atribuído à System.Threading.Thread.CurrentThread.CurrentUICulture propriedade. Quando um thread é iniciado, sua cultura de interface do usuário é inicialmente determinada da seguinte maneira:
Recuperando a cultura especificada pela propriedade DefaultThreadCurrentUICulture no domínio da aplicação onde o thread está a ser executado, caso o valor da propriedade não seja
null.Se o thread for um grupo de threads que está a executar uma operação assíncrona baseada em tarefa e a aplicação tiver como alvo o .NET Framework 4.6 ou uma versão posterior do .NET Framework, a sua cultura de interface do utilizador será determinada pela cultura da interface do utilizador do thread de chamada. O exemplo a seguir altera a cultura atual da interface do usuário para português (Brasil) e inicia seis tarefas, cada uma das quais exibe sua ID de thread, sua ID de tarefa e sua cultura de interface do usuário atual. Cada uma das tarefas (e os threads) herdou a cultura da interface do usuário do thread de chamada.
using System; using System.Collections.Generic; using System.Globalization; using System.Runtime.Versioning; using System.Threading; using System.Threading.Tasks; public class Example { public static async Task Main() { var tasks = new List<Task>(); Console.WriteLine($"The current UI culture is {Thread.CurrentThread.CurrentUICulture.Name}"); Thread.CurrentThread.CurrentUICulture = new CultureInfo("pt-BR"); // Change the current UI culture to Portuguese (Brazil). Console.WriteLine($"Current UI culture changed to {Thread.CurrentThread.CurrentUICulture.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($"UI Culture of task {Task.CurrentId} on thread {Thread.CurrentThread.ManagedThreadId} is {Thread.CurrentThread.CurrentUICulture.Name}"); })); await Task.WhenAll(tasks.ToArray()); } } // The example displays output like the following: // The current UI culture is en-US // Current UI culture changed to pt-BR // Application thread is thread 9 // UI Culture of task 2 on thread 11 is pt-BR // UI Culture of task 1 on thread 10 is pt-BR // UI Culture of task 3 on thread 11 is pt-BR // UI Culture of task 5 on thread 11 is pt-BR // UI Culture of task 6 on thread 11 is pt-BR // UI Culture of task 4 on thread 10 is pt-BRImports System.Globalization Imports System.Threading Module Example1 Public Sub Main() Dim tasks As New List(Of Task) Console.WriteLine("The current UI culture is {0}", Thread.CurrentThread.CurrentUICulture.Name) Thread.CurrentThread.CurrentUICulture = New CultureInfo("pt-BR") ' Change the current UI culture to Portuguese (Brazil). Console.WriteLine("Current culture changed to {0}", Thread.CurrentThread.CurrentUICulture.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.CurrentUICulture.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-BRPara obter mais informações, consulte a seção "Cultura e operações assíncronas baseadas em tarefas" na CultureInfo documentação.
Chamando a função do Windows
GetUserDefaultUILanguage.
Para alterar a cultura da interface do usuário usada por um thread, defina a Thread.CurrentUICulture propriedade como a nova cultura. Se você alterar explicitamente a cultura da interface do usuário de um thread dessa maneira, essa alteração persistirá se o thread cruzar os limites do domínio do aplicativo.
Observação
Se você definir o valor da propriedade como um CultureInfo objeto que representa uma nova cultura, o valor da Thread.CurrentThread.CurrentCulture propriedade também será alterado.
Obtenha a cultura atual da interface do usuário
A CultureInfo.CurrentUICulture propriedade é uma configuração por thread, ou seja, cada thread pode ter sua própria cultura de interface do usuário. Você obtém a cultura da interface do usuário do thread atual ao obter o valor da propriedade CultureInfo.CurrentUICulture, como ilustra o exemplo a seguir.
using System;
using System.Globalization;
public class Example2
{
public static void Main()
{
CultureInfo culture = CultureInfo.CurrentUICulture;
Console.WriteLine($"The current UI culture is {culture.NativeName} [{culture.Name}]");
}
}
// The example displays output like the following:
// The current UI culture is English (United States) [en-US]
Imports System.Globalization
Module Example3
Public Sub Main()
Dim culture As CultureInfo = CultureInfo.CurrentCulture
Console.WriteLine("The current UI culture is {0} [{1}]",
culture.NativeName, culture.Name)
End Sub
End Module
' The example displays output like the following:
' The current UI culture is English (United States) [en-US]
Você também pode recuperar o valor da cultura da interface do utilizador do thread atual através da propriedade Thread.CurrentUICulture.
Definir explicitamente a cultura atual da interface do usuário
A partir do .NET Framework 4.6, você pode alterar a cultura atual da interface do usuário atribuindo um CultureInfo objeto que representa a nova cultura à CultureInfo.CurrentUICulture propriedade. A cultura atual da interface do usuário pode ser definida como uma cultura específica (como en-US ou de-DE) ou como uma cultura neutra (como en ou de). O exemplo a seguir define a cultura atual da interface de utilizador para fr-FR ou Francês (França).
using System;
using System.Globalization;
public class Example1
{
public static void Main()
{
Console.WriteLine($"The current UI culture: {CultureInfo.CurrentUICulture.Name}");
CultureInfo.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr-FR");
Console.WriteLine($"The current UI culture: {CultureInfo.CurrentUICulture.Name}");
}
}
// The example displays output like the following:
// The current UI culture: en-US
// The current UI culture: fr-FR
Imports System.Globalization
Module Example2
Public Sub Main()
Console.WriteLine("The current UI culture: {0}",
CultureInfo.CurrentUICulture.Name)
CultureInfo.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr-FR")
Console.WriteLine("The current UI culture: {0}",
CultureInfo.CurrentUICulture.Name)
End Sub
End Module
' The example displays output like the following:
' The current UI culture: en-US
' The current UI culture: fr-FR
Em um aplicativo multithreaded, você pode definir explicitamente a cultura da interface do usuário de qualquer thread atribuindo um CultureInfo objeto que representa essa cultura à propriedade do Thread.CurrentUICulture thread. Se o thread cuja cultura você deseja definir for o thread atual, você poderá atribuir a nova cultura à CultureInfo.CurrentUICulture propriedade. Quando a cultura da interface do usuário de um thread é definida explicitamente, esse thread mantém a mesma cultura, mesmo que cruze os limites do domínio do aplicativo e execute código em outro domínio do aplicativo.
Definir implicitamente a cultura atual da interface do usuário
Quando um thread, incluindo o thread principal do aplicativo, é criado pela primeira vez, por padrão, sua cultura de interface do usuário atual é definida da seguinte maneira:
- Ao usar a cultura definida pela propriedade DefaultThreadCurrentUICulture para o domínio da aplicação atual, se o valor da propriedade não for
null. - Usando a cultura padrão do sistema. Em sistemas que usam o sistema operacional Windows, o Common Language Runtime chama a função Windows
GetUserDefaultUILanguagepara definir a cultura atual da interface do usuário.GetUserDefaultUILanguageretorna a cultura de interface do usuário padrão definida pelo usuário. Se o usuário não tiver definido um idioma padrão da interface do usuário, ele retornará a cultura originalmente instalada no sistema.
Se o thread cruzar os limites do aplicativo e executar código em outro domínio do aplicativo, sua cultura será determinada da mesma maneira que a de um thread recém-criado.
Observe que, se definir uma cultura de interface do utilizador específica que seja diferente da cultura da interface do utilizador instalada no sistema ou da cultura de interface do utilizador preferida do utilizador, e a sua aplicação iniciar vários threads, a cultura atual da interface do utilizador desses threads será a cultura devolvida pela função GetUserDefaultUILanguage, a menos que atribua uma cultura à propriedade DefaultThreadCurrentUICulture no domínio da aplicação em que o thread está a ser executado.
Considerações de segurança
Alterar a cultura do thread atual requer uma SecurityPermission permissão com o ControlThread valor definido.
Atenção
A manipulação de threads é perigosa devido ao estado de segurança associado aos threads. Portanto, essa permissão deve ser dada apenas a um código confiável e, em seguida, apenas conforme necessário. Não é possível alterar a cultura de threads em código semiconfiável.
A cultura atual da interface do usuário e os aplicativos UWP
Em aplicações da Plataforma Universal do Windows (UWP), a propriedade CurrentUICulture é leitura-gravação, assim como nas aplicações .NET Framework e .NET Core; você pode usá-la para obter e definir a cultura atual. No entanto, os aplicativos UWP não distinguem entre a cultura atual e a cultura atual da interface do usuário. As propriedades CurrentCulture e CurrentUICulture correspondem ao primeiro valor da coleção de linguagens Windows.ApplicationModel.Resources.Core.ResourceManager.DefaultContext.Languages.
Nos aplicativos .NET Framework e .NET Core, a cultura atual da interface do usuário é uma configuração por thread e a CurrentUICulture propriedade reflete apenas a cultura da interface do usuário do thread atual. Em aplicativos UWP, a cultura atual é mapeada para a propriedade Windows.ApplicationModel.Resources.Core.ResourceManager.DefaultContext.Languages , que é uma configuração global. Definir a CurrentCulture propriedade altera a cultura de todo o aplicativo, a cultura não pode ser definida por thread.