CultureInfo.CurrentCulture Propriedade

Definição

Obtém ou define o CultureInfo objeto que representa a cultura usada pelo thread atual e pelas 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 de Propriedade

A cultura usada pelo thread atual e as operações assíncronas baseadas em tarefas.

Exceções

A propriedade está definida como null.

Exemplos

O exemplo seguinte demonstra como alterar o CurrentCulture e CurrentUICulture do thread atual.

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.

Observações

O CultureInfo objeto retornado pela CurrentCulture propriedade e seus objetos associados determina o formato padrão para datas, horas, números e valores de moeda, a ordem de classificação do texto, convenções de caixa e comparações de cadeia de caracteres.

A cultura atual é uma propriedade de um fio de 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 muda. No entanto, recomendamos que se use sempre a propriedade CultureInfo.CurrentCulture para recuperar e definir a cultura atual.

O objeto CultureInfo que esta propriedade retorna é de leitura apenas. Isso significa que você não pode mutar o objeto existente, por exemplo, alterando o DateTimeFormat. Para alterar o formato de data e hora ou algum outro aspeto da cultura atual, crie um novo CultureInfo objeto e atribua-o à propriedade.

Como a cultura de um fio é determinada

Quando um thread é iniciado, sua cultura é inicialmente determinada da seguinte maneira:

  • Recuperando a cultura especificada pela propriedade DefaultThreadCurrentCulture no domínio da aplicação onde o thread está a ser executado, caso o valor da propriedade não seja null.

  • Se o tópico for um tópico do pool de tópicos que esteja executando uma operação assíncrona baseada em tarefas, a sua cultura será determinada pela cultura do tópico que faz a chamada. O exemplo a seguir altera a cultura atual para português (Brasil) e inicia seis tarefas, cada uma das quais exibe 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-BR
    
    Imports 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-BR
    

    Para obter mais informações, consulte Cultura e operações assíncronas baseadas em tarefas.

  • Ao chamar a função GetUserDefaultLocaleName no Windows ou a função uloc_getDefault da ICU, que atualmente chama a função POSIX setlocale com a categoria LC_MESSAGES, em sistemas tipo Unix.

Nota que, se definires uma cultura específica que seja diferente da cultura instalada no sistema ou da cultura preferida do utilizador, e a tua aplicação iniciar vários threads, a cultura atual desses threads será a cultura retornada pela função GetUserDefaultLocaleName, a menos que atribuas uma cultura à propriedade DefaultThreadCurrentCulture no domínio da aplicação em que o thread está a ser executado.

Para obter mais informações sobre como a cultura de um fluxo é determinada, consulte a seção "Cultura e fluxos" na página de CultureInfo referência.

Obtenha 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 da thread atual recuperando 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 (Holanda).

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 utilizando a propriedade CultureInfo.CurrentCulture requer uma permissão SecurityPermission com o valor ControlThread definido. 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.

Podes mudar explicitamente a cultura atual do tópico para uma cultura específica (como Francês (Canadá)) ou para uma cultura neutra (como Francês). Quando um CultureInfo objeto representa uma cultura neutra, os valores de CultureInfo propriedades como Calendar, CompareInfo, DateTimeFormat, NumberFormat, e TextInfo refletem a cultura específica que está associada à cultura neutra. Por exemplo, a cultura dominante para a cultura neutra inglesa é a inglesa (Estados Unidos); a cultura dominante para a cultura alemã é a alemã (Alemanha). O exemplo a seguir ilustra a diferença na formatação quando a cultura atual é definida como uma cultura específica, o francês (Canadá), e uma cultura neutra, o 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 sobreposições do utilizador

O Windows permite que os utilizadores substituam os valores de propriedade padrão do objeto CultureInfo e dos seus objetos associados usando as Opções Regionais e de Idioma no Painel de Controle. O objeto CultureInfo retornado pela propriedade CurrentCulture reflete essas alterações feitas pelo utilizador nos seguintes casos:

  • Se a cultura de thread atual for definida implicitamente pela função do Windows GetUserDefaultLocaleName.
  • Se a cultura da thread atual, que é definida pela propriedade DefaultThreadCurrentCulture, corresponder à cultura atual do sistema operativo Windows.
  • Se a cultura de thread atual for definida explicitamente como uma cultura retornada 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 CultureInfo(String) pelo construtor, e essa cultura corresponder à cultura atual do sistema Windows.

Em alguns casos, particularmente para aplicativos de servidor, definir a cultura atual para um CultureInfo objeto que reflita substituições de usuário pode ser indesejável. Em vez disso, pode-se definir a cultura atual para um objeto CultureInfo que não reflete as substituições do utilizador nas maneiras seguintes:

Aplica-se a

Ver também