TOC

This article has been localized into Portuguese by the community.

Trabalhando com Culture & Regions:

Culture da Aplicação & UICulture

Como discutimos no artigo anterior, lidar com a cultura é muito importante, especialmente quando se trabalha com datas e números. Por esse motivo, seu aplicativo sempre terá uma instância da classe CultureInfo definida como "CurrentCulture" - uma instância de fallback para todas as situações em que você não especifica especificamente qual cultura deve ser usada, por exemplo, para produzir um número. A menos que você altere essa propriedade, que existe na classe CultureInfo, ela será igual à cultura usada pelo sistema operacional. Aqui está uma maneira simples de verificar isso:

Console.WriteLine("Current culture: " + CultureInfo.CurrentCulture.Name);

Neste artigo, usaremos a classe CultureInfo o tempo todo, então não esqueça de incluí-la com a instrução using, como mostrado no topo do exemplo.

O exemplo produzirá a cultura usada pelo seu aplicativo, por exemplo "en-US" para um computador com o idioma inglês nos Estados Unidos. Se você mora na Alemanha e seu computador usa o idioma alemão, o resultado será "de-DE". Em outras palavras, as duas primeiras letras especificam o idioma, enquanto as duas últimas letras especificam o país ou a região.

No entanto, pode muito bem ser que você queira mais controle de qual cultura é usada por seu aplicativo. Por exemplo, se seu aplicativo usa o idioma inglês em todo o lugar, faz sentido produzir números em um formato alemão ou sueco apenas porque o computador do seu usuário o especifica? Talvez sim, mas se não, você pode facilmente especificar uma nova cultura default/fallback, usando a propriedade CurrentCulture novamente:

CultureInfo.CurrentCulture = new CultureInfo("en-US");
Console.WriteLine("Current culture: " + CultureInfo.CurrentCulture.Name);

float largeNumber = 12345.67f;
Console.WriteLine("Number format (Current culture): " + largeNumber.ToString());

CultureInfo germanCulture = new CultureInfo("de-DE");
Console.WriteLine("Number format (German): " + largeNumber.ToString(germanCulture));

Nós basicamente entramos e anulamos a propriedade CurrentCulture configurando-a para uma cultura en-US. Em seguida, emitimos, juntamente com um grande número de ponto flutuante. Você verá que o resultado é um número formatado como é em inglês. Nas últimas duas linhas, ilustramos como você pode, é claro, anular a cultura de fallback passando outra instância CultureInfo para o método ToString() - nesse caso, o número também será gerado em um formato alemão. A saída resultante deste exemplo deve ser algo como isto:

Current culture: en-US
Number format (Current culture): 12345.67
Number format (German): 12345,67

CurrentCulture vs. CurrentUICulture

Você pode notar que o CultureInfo também tem uma propriedade chamada CurrentUICulture . Essa propriedade só é relevante se você estiver usando arquivos de recursos para localizar uma interface com o usuário - nesse caso, seu aplicativo saberá quais versões dos arquivos de recursos devem ser carregadas, com base na propriedade CurrentUICulture. Para todos os outros fins, incluindo a formatação de números, datas e assim por diante, você deve usar a propriedade CurrentCulture .

CurrentCulture e Threads

Nós ainda não falamos sobre threads ainda, mas eles são basicamente um conceito que permitirá que seu aplicativo trabalhe em várias coisas ao mesmo tempo. Quando um aplicativo .NET é iniciado, um único encadeamento é criado e somente esse encadeamento será usado, a menos que você crie especificamente um novo, usando uma das muitas estratégias de multiencadeamento do framework. Eu menciono isso aqui porque também é muito relevante quando se trata da cultura de fallback do seu aplicativo. Na verdade, CultureInfo.CurrentCulture é basicamente um atalho para a propriedade Thread.CurrentThread.CurrentCulture , o que significa que sempre que você define o CurrentCulture, ele é válido apenas para o thread atual.

Antes do .NET Framework versão 4.5, você teria que especificar manualmente a cultura de cada novo thread que você criou. No entanto, no .NET 4.5, a propriedade CultureInfo.DefaultThreadCurrentCulture foi introduzida. Quando você definir, cada novo thread criado usará essa cultura também, e é tão fácil de usar quanto a propriedade CurrentCulture:

CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("de-DE");

Mas e o segmento existente? Bem, na verdade, se você ainda não definiu outra cultura para a propriedade CurrentCulture , a configuração da propriedade DefaultThreadCurrentCulture também será aplicada à propriedade CurrentCulture . Em outras palavras, faz sentido usar o DefaultThreadCurrentCulture em vez de CurrentCulture se você planeja usar vários threads em seu aplicativo - ele cuidará de todos os cenários.

Resumo

Usando as propriedades CultureInfo.CurrentCulture e/ou CultureInfo.DefaultThreadCurrentCulture , você pode definir uma cultura de fallback para seu aplicativo - ele sempre será usado sempre que um número ou uma data está sendo produzido, a menos que você especificamente anule isso em cada situação.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!