CultureInfo.CurrentUICulture Propriedade
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Obtém ou define o objeto CultureInfo que representa a cultura de interface do usuário atual usada pelo Resource Manager para pesquisar recursos específicos da cultura em tempo de execução.
public:
static property System::Globalization::CultureInfo ^ CurrentUICulture { System::Globalization::CultureInfo ^ get(); void set(System::Globalization::CultureInfo ^ value); };
public:
static property System::Globalization::CultureInfo ^ CurrentUICulture { System::Globalization::CultureInfo ^ get(); };
public static System.Globalization.CultureInfo CurrentUICulture { get; set; }
public static System.Globalization.CultureInfo CurrentUICulture { get; }
static member CurrentUICulture : System.Globalization.CultureInfo with get, set
static member CurrentUICulture : System.Globalization.CultureInfo
Public Shared Property CurrentUICulture As CultureInfo
Public Shared ReadOnly Property CurrentUICulture As CultureInfo
Valor da propriedade
A cultura usada pelo Resource Manager para pesquisar recursos específicos da cultura em tempo de execução.
Exceções
A propriedade é definida como null.
A propriedade é definida como um nome de cultura que não pode ser usado para localizar um arquivo de recurso. Os nomes de arquivo de recurso podem incluir apenas letras, números, hifens ou sublinhados.
Exemplos
O exemplo de código a seguir demonstra como alterar o CurrentCulture thread atual e CurrentUICulture o thread.
using System;
using System.Globalization;
public class Example0
{
public static void Main()
{
// Display the name of the current culture.
Console.WriteLine("CurrentCulture is {0}.", CultureInfo.CurrentCulture.Name);
// Change the current culture to th-TH.
CultureInfo.CurrentCulture = new CultureInfo("th-TH", false);
Console.WriteLine("CurrentCulture is now {0}.", CultureInfo.CurrentCulture.Name);
// Display the name of the current UI culture.
Console.WriteLine("CurrentUICulture is {0}.", CultureInfo.CurrentUICulture.Name);
// Change the current UI culture to ja-JP.
CultureInfo.CurrentUICulture = new CultureInfo( "ja-JP", false );
Console.WriteLine("CurrentUICulture is now {0}.", CultureInfo.CurrentUICulture.Name);
}
}
// The example displays the following output:
// CurrentCulture is en-US.
// CurrentCulture is now th-TH.
// CurrentUICulture is en-US.
// CurrentUICulture is now ja-JP.
Imports System.Globalization
Imports System.Threading
Public Module Example2
Public Sub Run()
' Display the name of the current culture.
Console.WriteLine("CurrentCulture is {0}.", CultureInfo.CurrentCulture.Name)
' Change the current culture to th-TH.
CultureInfo.CurrentCulture = New CultureInfo("th-TH", False)
Console.WriteLine("CurrentCulture is now {0}.", CultureInfo.CurrentCulture.Name)
' Display the name of the current UI culture.
Console.WriteLine("CurrentUICulture is {0}.", CultureInfo.CurrentUICulture.Name)
' Change the current UI culture to ja-JP.
CultureInfo.CurrentUICulture = New CultureInfo("ja-JP", False)
Console.WriteLine("CurrentUICulture is now {0}.", CultureInfo.CurrentUICulture.Name)
End Sub
End Module
' The example displays the following output:
' CurrentCulture is en-US.
' CurrentCulture is now th-TH.
' CurrentUICulture is en-US.
' CurrentUICulture is now ja-JP.
Comentários
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:
Ao recuperar a cultura especificada pela propriedade DefaultThreadCurrentUICulture no domínio do aplicativo no qual o thread está sendo executado, se o valor da propriedade não for
null.Se o thread for um thread de pool de threads que está executando uma operação assíncrona baseada em tarefa, sua cultura de interface do usuário será determinada pela cultura da interface do usuário 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 exibindo 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 UI 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 UI culture is en-US ' Current UI 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 Cultura e operações assíncronas baseadas em tarefas.
Chamando a função do Windows
GetUserDefaultUILanguage.
Para alterar a cultura de interface do usuário usada por uma thread, configure a propriedade Thread.CurrentUICulture para a nova cultura. Se você alterar explicitamente a cultura da interface do usuário de um thread dessa forma, essa alteração persistirá se o thread ultrapassar os limites de domínio do aplicativo.
Note
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.
Obter 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ê pode obter a cultura da interface do usuário do thread atual recuperando 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.CurrentUICulture
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 UI do thread atual a partir da propriedade Thread.CurrentUICulture.
Definir explicitamente a cultura atual da interface do usuário
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 para uma cultura neutra (como en ou de). O exemplo a seguir define a cultura atual da interface do usuário como 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 multithread, você pode definir explicitamente a cultura de interface de qualquer thread ao atribuir um objeto CultureInfo que representa essa cultura à propriedade Thread.CurrentUICulture do 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 ele cruze os limites de domínio do aplicativo e execute o 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:
- Usando a cultura definida pela propriedade DefaultThreadCurrentUICulture para o domínio do aplicativo atual, caso o valor da propriedade não seja
null. - Usando a cultura padrão do sistema. Em sistemas que usam o sistema operacional Windows, o common language runtime chama a função do 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 de interface do usuário padrão, ele retornará a cultura instalada originalmente no sistema.
Se o thread ultrapassar os limites do aplicativo e executar o código em outro domínio de aplicativo, sua cultura será determinada da mesma forma que a de um thread recém-criado.
Observe que se você definir uma cultura de interface do usuário específica diferente da cultura de interface do usuário instalada pelo sistema ou da cultura de interface do usuário preferida do usuário e seu aplicativo iniciar vários threads, a cultura atual da interface do usuário desses threads será a cultura retornada pela GetUserDefaultUILanguage função, a menos que você atribua uma cultura à DefaultThreadCurrentUICulture propriedade no domínio do aplicativo no qual o thread está sendo executado.
Considerações de segurança
Alterar a cultura do thread atual requer uma permissão de SecurityPermission com o valor ControlThread definido.
Caution
A manipulação de threads é perigosa devido ao estado de segurança associado aos threads. Portanto, essa permissão deve ser dada apenas ao código confiável e, em seguida, somente conforme necessário. Não é possível alterar a cultura do thread no código semi-confiável.