Hoje veremos como usar alguns dos recursos das classes CultureInfo e RegionInfo da plataforma .NET. |
Esse conceito é um código simples que contém uma string com dois caracteres que representam a linguagem e dois caracteres que representam o país, separados por um hífen.
Assim 'pt-BR' representa a língua portuguesa falada no Brasil, e, representa não só a linguagem escrita mas tudo que envolve a mesma como campos numéricos, monetários, datas, horários, etc.
Além disso existe dois conceitos importantes na plataforma .NET que são :
1 - neutral culture, ou cultura neutra, que é usado para formatar a linguagem de forma genérica sem definir o pais. Assim para formatar a aplicação para português sem definir o país basta usar a string 'pt'.
2 - culture invariant, ou cultura invariante, permite formatar strings com as escrevemos no código, independente da cultura.
No namespace System.Globalization temos duas classes importantes :
CultureInfo - Fornece informações sobre uma cultura específica (chamada de localidade para o desenvolvimento de código não gerenciado). As informações incluem os nomes da cultura, o sistema de escrita, o calendário usado, a ordem de classificação das cadeias de caracteres e a formatação de datas e números;
RegionInfo - Que contém informações sobre o país/região, e, não depende do idioma ou da cultura do usuário;
Nota: Lembrando que é a thread da aplicação que controla as informações de cultura da aplicação.
Para obter a lista de culturas disponíveis podemos usar o código abaixo:
static void Main(string[] args)
{
CultureInfo[] specificCultures =
CultureInfo.GetCultures(CultureTypes.SpecificCultures);
foreach (CultureInfo ci in specificCultures)
Console.WriteLine(ci.DisplayName);
Console.WriteLine("Total: " + specificCultures.Length);
Console.ReadLine();
}
|
Aqui usamos o método estático GetCultures na classe CultureInfo para obter uma lista de culturas. Ele requer o parâmetro CultureTypes, que especifica que tipo de cultura que você está procurando. Nesse caso, solicitei culturas específicas, que, são as que estão ligadas a um idioma e a um país/região.
Para obter uma lista de cultura neutras podemos usar o código a seguir:
private static void CulturasNeutras()
{
CultureInfo[] neutralCultures =
CultureInfo.GetCultures(CultureTypes.NeutralCultures);
foreach (CultureInfo ci in neutralCultures)
Console.WriteLine(ci.DisplayName);
Console.WriteLine("Total: " + neutralCultures.Length);
}
|
Para definir uma cultura basta obter uma instância da classe CultureInfo e você vai ter acesso a uma ampla variedade de propriedades e métodos:
private static void cultureInfo1()
{
CultureInfo ptBR = new CultureInfo("pt-BR");
foreach (string nomeDia in ptBR.DateTimeFormat.DayNames)
Console.WriteLine(nomeDia);
Console.WriteLine("Hoje é : " +
ptBR.DateTimeFormat.GetDayName(DateTime.Now.DayOfWeek));
}
|
Resultado:
Ou ainda:
private static void cultureInfo2()
{
CultureInfo ptBR = new CultureInfo("pt-BR");
foreach (string nomeMes in ptBR.DateTimeFormat.MonthNames)
Console.WriteLine(nomeMes);
Console.WriteLine("Mês atual: " +
ptBR.DateTimeFormat.GetMonthName(DateTime.Now.Month));
}
|
Resultado:
Um recurso importante é a propriedade NumberFormat que obtém ou define um NumberFormatInfo que define o formato culturalmente apropriado de exibição de números, moeda e percentual.
As informações de como a cultura trata a formatação númerica pode ser obtida usando as propriedades e os métodos na propriedade NumberFormat :
private static void FormatoNumerico()
{
CultureInfo enUs = new CultureInfo("en-US");
Console.WriteLine(enUs.DisplayName + ":");
Console.WriteLine("SeparadorGrupoNumerico: " + enUs.NumberFormat.NumberGroupSeparator);
Console.WriteLine("SeparadorNumeroDecimal: " + enUs.NumberFormat.NumberDecimalSeparator);
CultureInfo deDe = new CultureInfo("de-DE");
Console.WriteLine(deDe.DisplayName + ":");
Console.WriteLine("SeparadorGrupoNumerico: " + deDe.NumberFormat.NumberGroupSeparator);
Console.WriteLine("SeparadorNumeroDecimal: " + deDe.NumberFormat.NumberDecimalSeparator);
CultureInfo ptBR = new CultureInfo("pt-BR");
Console.WriteLine(ptBR.DisplayName + ":");
Console.WriteLine("SeparadorGrupoNumerico: " + ptBR.NumberFormat.NumberGroupSeparator);
Console.WriteLine("SeparadorNumeroDecimal: " + ptBR.NumberFormat.NumberDecimalSeparator);
}
|
Resultado:
Além disso, podemos usar a cultura neutra e a cultura invariante que podem ser úteis em certos cenários.
Veja um exemplo de cultura neutra usando o idioma 'pt' :
private static void Exemplo1()
{
var valor = 1.78;
Thread.CurrentThread.CurrentCulture = new CultureInfo("pt");
Console.WriteLine($"Cultura atual : {Thread.CurrentThread.CurrentCulture}" );
Console.WriteLine($"Data: {DateTime.Now}");
Console.WriteLine($"Moeda: {valor} ");
}
|
Resultado obtido:
Para poder formatar o número como ele foi definido basta usar a cultura invariante:
private static void Exemplo1() { var valor = 1.78; Thread.CurrentThread.CurrentCulture = new CultureInfo("pt"); Console.WriteLine($"Cultura atual : {Thread.CurrentThread.CurrentCulture}" ); Console.WriteLine($"Data: {DateTime.Now}"); Console.WriteLine($"Moeda (pt) : {valor} "); Console.WriteLine($"Moeda (invariant) : {valor.ToString(CultureInfo.InvariantCulture)} "); } |
Resultado:
A classe RegionInfo traz recursos importantes ao desenvolvedor como informar se a região ou país usa o sistema métrico, nome e símbolo da moeda da região e outras informações.
Abaixo temos a tabela mostrando as principais propriedades da classe RegionInfo:
Nome | Descrição |
CurrencyNativeName | Nome nativo da moeda local |
CurrentEnglishName | Nome, em inglês da moeda local |
CurrencySymbol | Símbolo da moeda Local |
IsMetric | Indica se região ou país usa o sistema métrico |
ISOCurrencySymbol | Símbolo da moeda local conforme a norma ISO 4217 |
TreeLetterISORegionName | Código do país/região em 3 letras conforme norma ISO 3166 |
NativeName | Nome, na linguagem nativa , no país ou região |
Exemplo :
private static void ExemploRegionInfo1()
{
var regiaoInfo = new RegionInfo("pt-BR");
var hoje = DateTime.Now;
Console.WriteLine($"Moeda - {regiaoInfo.CurrencySymbol} {"34,67"}"); Console.WriteLine($"Moeda 34,67 - {regiaoInfo.CurrencyNativeName}"); Console.WriteLine($"{regiaoInfo.ThreeLetterISORegionName} "); Console.WriteLine($"{regiaoInfo.ISOCurrencySymbol} "); Console.WriteLine($"Usa sistema métrico - {regiaoInfo.IsMetric} "); Console.WriteLine(hoje.ToString()); Console.WriteLine(hoje.ToShortDateString()); Console.WriteLine(hoje.ToLongDateString()); Console.WriteLine(hoje.ToShortTimeString()); Console.WriteLine(hoje.ToLongTimeString()); } |
Resultado:
E estamos conversados.
Pegue o projeto aqui: CShp_CultureInfo1.zip
"E, chegando-se
Jesus, falou-lhes, dizendo: É-me dado todo o poder no céu e na terra."
Mateus 28:18
Referências:
VB .NET - Lendo Arquivos Binários - BinaryReader - Macoratti ...
Tratamento de arquivos - Questões práticas - Macoratti.net
C# - Copiando Arquivos - Macoratti
C# - Localizando linhas em um arquivo texto - Macoratti.net
VB .NET - Armazenando um objeto serializado em um arquivo
C# - Programa para Loja de Instrumentos Musicais - Macoratti ...
C# - Lendo e gravando dados binários no SQL ... - Macoratti