CultureInfo.CurrentCulture 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 CultureInfo objeto que representa a cultura usada pelo thread atual e operações assíncronas baseadas em tarefas.
public:
static property System::Globalization::CultureInfo ^ CurrentCulture { System::Globalization::CultureInfo ^ get(); void set(System::Globalization::CultureInfo ^ value); };
public:
static property System::Globalization::CultureInfo ^ CurrentCulture { System::Globalization::CultureInfo ^ get(); };
public static System.Globalization.CultureInfo CurrentCulture { get; set; }
public static System.Globalization.CultureInfo CurrentCulture { get; }
static member CurrentCulture : System.Globalization.CultureInfo with get, set
static member CurrentCulture : System.Globalization.CultureInfo
Public Shared Property CurrentCulture As CultureInfo
Public Shared ReadOnly Property CurrentCulture As CultureInfo
Valor da propriedade
A cultura usada pelo thread atual e operações assíncronas baseadas em tarefas.
Exceções
A propriedade é definida como null.
Exemplos
O exemplo 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
O objeto CultureInfo exibido pela propriedade CurrentCulture e seus objetos associados determinam o formato padrão para datas, horas, números e valores de moeda, a ordem de classificação de texto, convenções de maiúsculas e minúsculas e comparações de cadeia de caracteres.
A cultura atual é uma propriedade do thread em execução. Quando você define essa propriedade como um CultureInfo objeto que representa uma nova cultura, o valor da Thread.CurrentThread.CurrentCulture propriedade também é alterado. No entanto, recomendamos que você use sempre a propriedade CultureInfo.CurrentCulture para recuperar e definir a cultura atual.
O objeto CultureInfo que essa propriedade exibe é somente leitura. Isso significa que você não pode alterar o objeto existente, por exemplo, alterando o DateTimeFormat. Para alterar o formato de data e hora ou algum outro aspecto da cultura atual, crie um novo CultureInfo objeto e atribua-o à propriedade.
Como a cultura de um thread é determinada
Quando um thread é iniciado, sua cultura é inicialmente determinada da seguinte maneira:
Ao recuperar a cultura especificada pela propriedade DefaultThreadCurrentCulture 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 do pool de threads que está executando uma operação assíncrona baseada em tarefas, sua cultura será determinada pela cultura do thread de chamada. O exemplo a seguir altera a cultura atual para português (Brasil) e inicia seis tarefas, cada uma exibindo sua ID de thread, sua ID de tarefa e sua cultura atual. Cada uma das tarefas (e os threads) herdou a cultura do thread de chamada.
using System; using System.Collections.Generic; using System.Globalization; using System.Threading; using System.Threading.Tasks; public class Example14 { public static async Task Main() { var tasks = new List<Task>(); Console.WriteLine($"The current culture is {Thread.CurrentThread.CurrentCulture.Name}"); Thread.CurrentThread.CurrentCulture = new CultureInfo("pt-BR"); // Change the current culture to Portuguese (Brazil). Console.WriteLine($"Current culture changed to {Thread.CurrentThread.CurrentCulture.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($"Culture of task {Task.CurrentId} on thread {Thread.CurrentThread.ManagedThreadId} is {Thread.CurrentThread.CurrentCulture.Name}"); })); await Task.WhenAll(tasks.ToArray()); } } // 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-BRImports System.Globalization Imports System.Threading Module Example1 Public Sub S1() Dim tasks As New List(Of Task) Console.WriteLine("The current culture is {0}", Thread.CurrentThread.CurrentCulture.Name) Thread.CurrentThread.CurrentCulture = New CultureInfo("pt-BR") ' Change the current culture to Portuguese (Brazil). Console.WriteLine("Current culture changed to {0}", Thread.CurrentThread.CurrentCulture.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.CurrentCulture.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 Cultura e operações assíncronas baseadas em tarefas.
Chamando a função
GetUserDefaultLocaleNameno Windows ou a funçãouloc_getDefaultdo ICU, que atualmente chama a função POSIXsetlocalecom a categoriaLC_MESSAGES, em sistemas semelhantes ao Unix.
Observe que se você definir uma cultura específica diferente da cultura instalada pelo sistema ou da cultura preferencial do usuário e seu aplicativo iniciar vários threads, a cultura atual desses threads será a cultura retornada pela GetUserDefaultLocaleName função, a menos que você atribua uma cultura à DefaultThreadCurrentCulture propriedade no domínio do aplicativo no qual o thread está sendo executado.
Para obter mais informações sobre como a cultura de um thread é determinada, consulte a seção "Cultura e threads" na página de referência CultureInfo.
Obter a cultura atual
A CultureInfo.CurrentCulture propriedade é uma configuração por thread; ou seja, cada thread pode ter sua própria cultura. Você obtém a cultura do thread atual ao recuperar o valor da propriedade CultureInfo.CurrentCulture, como ilustra o exemplo a seguir.
using System;
using System.Globalization;
public class Example5
{
public static void Main()
{
CultureInfo culture = CultureInfo.CurrentCulture;
Console.WriteLine($"The current culture is {culture.NativeName} [{culture.Name}]");
}
}
// The example displays output like the following:
// The current culture is English (United States) [en-US]
Imports System.Globalization
Module Example3
Public Sub S1()
Dim culture As CultureInfo = CultureInfo.CurrentCulture
Console.WriteLine("The current culture is {0} [{1}]",
culture.NativeName, culture.Name)
End Sub
End Module
' The example displays output like the following:
' The current culture is English (United States) [en-US]
Definir a propriedade CurrentCulture explicitamente
Para alterar a cultura usada por um thread existente, defina a CultureInfo.CurrentCulture propriedade como a nova cultura. O exemplo a seguir altera a cultura de thread atual para holandês (Países Baixos).
using System;
using System.Globalization;
using System.Threading;
public class Info11 : MarshalByRefObject
{
public void ShowCurrentCulture()
{
Console.WriteLine($"Culture of thread {Thread.CurrentThread.Name}: {CultureInfo.CurrentCulture.Name}");
}
}
public class SetCultureExample
{
public static void Run()
{
Info11 inf = new Info11();
// Set the current culture to Dutch (Netherlands).
Thread.CurrentThread.Name = "MainThread";
CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("nl-NL");
inf.ShowCurrentCulture();
}
}
// The example displays the following output:
//
// Culture of thread MainThread: nl-NL
Note
Alterar a cultura usando a propriedade CultureInfo.CurrentCulture requer uma permissão SecurityPermission com o valor ControlThread configurado. 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.
Você pode alterar explicitamente a cultura de thread atual para uma cultura específica (como francês (Canadá)) ou uma cultura neutra (como francês). Quando um CultureInfo objeto representa uma cultura neutra, os valores de CultureInfo propriedades comoCalendar, , CompareInfo, DateTimeFormate NumberFormatTextInfo refletem a cultura específica associada à cultura neutra. Por exemplo, a cultura dominante para a cultura neutra em inglês é inglês (Estados Unidos); a cultura dominante para a cultura alemã é alemão (Alemanha). O exemplo a seguir ilustra a diferença na formatação quando a cultura atual é definida como uma cultura específica, francês (Canadá) e uma cultura neutra, francês.
using System;
using System.Globalization;
using System.Threading;
public class Example12
{
public static void Main()
{
double value = 1634.92;
CultureInfo.CurrentCulture = new CultureInfo("fr-CA");
Console.WriteLine($"Current Culture: {CultureInfo.CurrentCulture.Name}");
Console.WriteLine($"{value:C2}\n");
Thread.CurrentThread.CurrentCulture = new CultureInfo("fr");
Console.WriteLine($"Current Culture: {CultureInfo.CurrentCulture.Name}");
Console.WriteLine($"{value:C2}");
}
}
// The example displays the following output:
// Current Culture: fr-CA
// 1 634,92 $
//
// Current Culture: fr
// 1 634,92 €
Imports System.Globalization
Imports System.Threading
Module Example4
Public Sub S1()
Dim value As Double = 1634.92
CultureInfo.CurrentCulture = New CultureInfo("fr-CA")
Console.WriteLine("Current Culture: {0}",
CultureInfo.CurrentCulture.Name)
Console.WriteLine("{0:C2}", value)
Console.WriteLine()
Thread.CurrentThread.CurrentCulture = New CultureInfo("fr")
Console.WriteLine("Current Culture: {0}",
CultureInfo.CurrentCulture.Name)
Console.WriteLine("{0:C2}", value)
End Sub
End Module
' The example displays the following output:
' Current Culture: fr-CA
' 1 634,92 $
'
' Current Culture: fr
' 1 634,92 €
A cultura atual e as substituições de usuário
O Windows permite que os usuários substituam os valores de propriedade padrão do CultureInfo objeto e seus objetos associados usando opções regionais e de linguagem no Painel de Controle. O objeto CultureInfo retornado pela propriedade CurrentCulture reflete essas substituições feitas pelo usuário nos seguintes casos:
- Quando a cultura de thread atual é configurada implicitamente pela função do Windows
GetUserDefaultLocaleName. - Se a cultura de thread atual, definida pela propriedade DefaultThreadCurrentCulture, corresponder à cultura do sistema Windows atual.
- Se a cultura de thread atual for definida explicitamente como uma cultura exibida pelo método CreateSpecificCulture e essa cultura corresponder à cultura atual do sistema Windows.
- Se a cultura de thread atual for definida explicitamente como uma cultura instanciada pelo construtor CultureInfo(String) e essa cultura corresponder à cultura atual do sistema Windows.
Em alguns casos, especialmente para aplicativos de servidor, pode ser indesejável definir a cultura atual como um objeto CultureInfo que reflita as substituições do usuário. Em vez disso, você pode definir a cultura atual como um objeto CultureInfo que não reflita as substituições do usuário das seguintes maneiras:
- Chamando o construtor CultureInfo(String, Boolean) com um valor
falsepara o argumentouseUserOverride. - Chamando pelo método GetCultureInfo, que retorna um objeto CultureInfo armazenado em cache, de apenas leitura.