Lidar com culture sempre é um problema, e a conversão de datas e números para strings e vice-versa é pior ainda se o seu sistema permite que usuários de múltiplas culturas imputem a informação da maneira a que estão habituados, ou se você tem dados sensíveis à cultura gravados em campos verchar do banco de dados.
É importante que as formatações de dados sejam aplicadas à cultura apenas na exibição do dado, mas nunca no seu processamento e armazenamento. Ao gravar no banco de dados, grave sempre o dado bruto em seu formato e tipo de dado padrão (double, integer, datetime etc) usando para isso parâmetros tipados ou o Entity Framework, ou ainda o nHibernate.
Quando necessário armazenar, por exemplo, uma data como string, então opte por um formato reconhecido internacionalmente, como o padrão ODBC: yyyy-MM-dd (2013-12-02).
Abaixo um programinha console que lista todas as Cultures disponíveis e mostra qual é a corrente configurada no .net.
using System;
using System.Collections.Generic;
using System.Text;
using System.Globalization;
namespace CultureList
{
class Program
{
static void Main(string[] args)
{
// get culture names
List list = new List();
foreach (CultureInfo ci in CultureInfo.GetCultures(CultureTypes.AllCultures))
{
string specName = "(none)";
try {
specName = CultureInfo.CreateSpecificCulture(ci.Name).Name;
list.Add(String.Format("{0,-12}\t{1,-12}\t{2,-40}\t{3}\t{4}\t{5}\t{6}",
ci.Name,
specName,
ci.EnglishName,
ci.NumberFormat.NumberGroupSeparator,
ci.NumberFormat.NumberDecimalSeparator,
ci.NumberFormat.CurrencyGroupSeparator,
ci.NumberFormat.CurrencyDecimalSeparator));
}
catch { }
}
list.Sort(); // sort by name
// write to console
Console.WriteLine("CULTURE\tSPEC.CULTURE\tENGLISH NAME\tN-GROUP\tN-DECIMAL\tM-GROUP\tM-DECIMAL");
Console.WriteLine("--------------------------------------------------------------");
foreach (string str in list)
Console.WriteLine(str);
Console.WriteLine("");
Console.WriteLine("");
Console.WriteLine("Informações de cultura corrente:");
Console.WriteLine("--------------------------------------------------------------");
Console.WriteLine("System.Globalization.CultureInfo.CurrentCulture -->" + System.Globalization.CultureInfo.CurrentCulture);
Console.WriteLine("System.Globalization.CultureInfo.CurrentUICulture -->" + System.Globalization.CultureInfo.CurrentUICulture);
Console.WriteLine("System.Globalization.CultureInfo.InstalledUICulture -->" + System.Globalization.CultureInfo.InstalledUICulture);
Console.ReadLine();
}
}
}
Código disponível aqui
Comentários
Postar um comentário