CultureInfo.CurrentUICulture Propriedade

Definição

Obtém ou define o objeto CultureInfo que representa a cultura de interface do usuário atual usada pelo Gerenciador de Recursos para procurar recursos específicos da cultura no 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; }
member this.CurrentUICulture : System.Globalization.CultureInfo with get, set
member this.CurrentUICulture : System.Globalization.CultureInfo
Public Shared Property CurrentUICulture As CultureInfo
Public Shared ReadOnly Property CurrentUICulture As CultureInfo

Valor da propriedade

CultureInfo

A cultura usada pelo Gerenciador de Recursos para pesquisar recursos específicos da cultura no tempo de execução.

Exceções

A propriedade é definida como null.

A propriedade é definida como um nome de cultura não pode ser usado para localizar um arquivo de recurso. Nomes de arquivos de recursos podem incluir somente letras, números, hifens ou sublinhados.

Exemplos

O exemplo de código a seguir demonstra como alterar o CurrentCulture thread atual.CurrentUICulture

using namespace System;
using namespace System::Globalization;
using namespace System::Threading;

int main()
{
   // Display the name of the current thread culture.
   Console::WriteLine("CurrentCulture is {0}.", CultureInfo::CurrentCulture->Name);
   
   // Change the current culture to th-TH.
   CultureInfo::CurrentCulture = gcnew CultureInfo("th-TH",false);
   Console::WriteLine("CurrentCulture is now {0}.", CultureInfo::CurrentCulture->Name);
   
   // Displays the name of the CurrentUICulture of the current thread.
   Console::WriteLine("CurrentUICulture is {0}.", CultureInfo::CurrentCulture->Name);
   
   // Changes the CurrentUICulture of the current thread to ja-JP.
   CultureInfo::CurrentUICulture = gcnew CultureInfo("ja-JP",false);
   Console::WriteLine("CurrentUICulture is now {0}.", CultureInfo::CurrentCulture->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.
using System;
using System.Globalization;
using System.Threading;

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 Example
   Public Sub 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)
   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 cultura atual da interface do usuário é uma propriedade por thread. Ou seja, cada thread tem sua própria cultura de interface do usuário atual. Essa propriedade é equivalente à recuperação ou, começando pelo .NET Framework 4.6, definindo 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 DefaultThreadCurrentUICulture propriedade no domínio do aplicativo no qual o thread está sendo executado, se o valor da propriedade não nullfor .

  • Se o thread for um thread do pool de threads que está executando uma operação assíncrona baseada em tarefa e o aplicativo tiver como destino o .NET Framework 4.6 ou uma versão posterior do .NET Framework, 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 delas 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;
    
    [assembly:TargetFramework(".NETFramework,Version=v4.6")]
    
    public class Example
    {
       public static async Task Main()
       {
          var tasks = new List<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 (int ctr = 0; ctr <= 5; ctr++)
             tasks.Add(Task.Run( () => {
                                   Console.WriteLine("UI Culture of task {0} on thread {1} is {2}",
                                                     Task.CurrentId,
                                                     Thread.CurrentThread.ManagedThreadId,
                                                     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-BR
    
    Imports System.Collections.Generic
    Imports System.Globalization
    Imports System.Runtime.Versioning
    Imports System.Threading
    Imports System.Threading.Tasks
    
    <assembly:TargetFramework(".NETFramework,Version=v4.6")>
    
    Module Example
       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-BR
    

    Para obter mais informações, consulte a seção "Cultura e operações assíncronas baseadas em tarefas" no CultureInfo tópico.

  • Chamando a função WindowsGetUserDefaultUILanguage.

Observação

No .NET Compact Framework, a CurrentUICulture propriedade é somente leitura. A cultura atual da interface do usuário é determinada pelas configurações regionais do sistema e não pode ser alterada programaticamente.

A partir do .NET Framework 4.6, para alterar a cultura de 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 forma, essa alteração persistirá se o thread ultrapassar os limites do domínio do aplicativo.

Observação

No .NET Framework 4.5.2 e versões anteriores, a CurrentUICulture propriedade é somente leitura; ou seja, você pode recuperar o valor da propriedade, mas não pode defini-lo. Para alterar a cultura atual da interface do usuário, atribua o CultureInfo objeto que representa a nova cultura da interface do Thread.CurrentThread.CurrentUICulture usuário à propriedade. Começando com o .NET Framework 4.6, a CultureInfo.CurrentUICulture propriedade é leitura-gravação; você pode definir e recuperar o valor da propriedade. 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.

Nesta seção:

Obtendo a cultura da interface do usuário atual
Definindo explicitamente a cultura da interface do usuário atual
Configurando implicitamente a cultura da interface do usuário atual
Considerações de segurança
A cultura da interface do usuário atual e os aplicativos Windows\

Obtendo a cultura da interface do usuário atual

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 recuperando o valor da CultureInfo.CurrentUICulture propriedade, como ilustra o exemplo a seguir.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo culture = CultureInfo.CurrentUICulture;
      Console.WriteLine("The current UI culture is {0} [{1}]",
                        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 Example
   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 de interface do usuário do thread atual da Thread.CurrentUICulture propriedade.

Definindo explicitamente a cultura da interface do usuário atual

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 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 Example
{
   public static void 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);
   }
}
// The example displays output like the following:
//       The current UI culture: en-US
//       The current UI culture: fr-FR
Imports System.Globalization
Imports System.Threading

Module Example
   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 ele cruze os limites de domínio do aplicativo e execute o código em outro domínio do aplicativo.

Definindo implicitamente a cultura da interface do usuário atual

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 DefaultThreadCurrentUICulture propriedade para o domínio do aplicativo atual se o valor da propriedade não nullfor .

  • Usando a cultura padrão do sistema. Em sistemas que usam o sistema operacional Windows, o common language runtime chama a função Windows GetUserDefaultUILanguage para definir a cultura atual da interface do usuário. GetUserDefaultUILanguage retorna 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 originalmente instalada no sistema.

Se o thread ultrapassar os limites do aplicativo e executar o código em outro domínio do 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 sobre segurança

Alterar a cultura do thread atual requer uma SecurityPermission permissão com o conjunto de ControlThread valores.

Cuidado

Manipular threads é perigoso devido ao estado de segurança associado a threads. Portanto, essa permissão deve ser dada somente ao código confiável e, em seguida, somente conforme necessário. Não é possível alterar a cultura de thread no código semi-confiável.

A cultura atual da interface do usuário e os aplicativos UWP

Em aplicativos Plataforma Universal do Windows (UWP), a CurrentUICulture propriedade é de leitura/gravação, assim como está em aplicativos .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. O CurrentCulture mapa e CurrentUICulture as propriedades para o primeiro valor no Windows. Coleção ApplicationModel.Resources.Core.ResourceManager.DefaultContext.Languages.

Em aplicativos .NET Framework e .NET Core, a cultura atual da interface do usuário é uma configuração por thread e a CurrentUICulture propriedade reflete a cultura da interface do usuário somente do thread atual. Em aplicativos UWP, a cultura atual é mapeada para o Windows. Propriedade 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.

Aplica-se a

Confira também