segunda-feira, 2 de dezembro de 2013

Listar todas as culturas do .net e a configuração corrente

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

Nenhum comentário:

Postar um comentário

Postagens populares

Marcadores

delphi (60) C# (31) poo (21) Lazarus (19) Site aos Pedaços (15) sql (13) Reflexões (10) .Net (9) Humor (9) javascript (9) ASp.Net (8) api (8) Básico (6) Programação (6) ms sql server (5) Web (4) banco de dados (4) HTML (3) PHP (3) Python (3) design patterns (3) jQuery (3) livros (3) metaprogramação (3) Ajax (2) Debug (2) Dicas Básicas Windows (2) Pascal (2) games (2) linguagem (2) música (2) singleton (2) tecnologia (2) Anime (1) Api do Windows (1) Assembly (1) Eventos (1) Experts (1) GNU (1) Inglês (1) JSON (1) SO (1) datas (1) developers (1) dicas (1) easter egg (1) firebird (1) interfaces (1) introspecção (1) memo (1) oracle (1) reflexão (1)