O novo sistema de localizacão do Django
Esqueça tudo o que eu já falei e fiz sobre formatação de data e valores monetários no Django.
A solução veio tarde, mas está presente na versão 1.2. Não foi alardeada, mas é madura, funcional e melhor do que qualquer outra solução que eu já tenha visto. Mais uma vez os caras do core team acertaram na receita.
Para quem tomou medidas cautelosas e externas ao código específico como eu tomei, a migração é fácil e rápida, já aqueles que não gostaram da minha "gambiarra" e resolveram "no braço" vão ter um pouco mais de trabalho, mas o fato é que o novo sistema de localização é muito bom, e definitivo :)
Para começar, vamos esclarecer um ponto importante:
Internacionalização X Localização

Você sabe a diferença [1] entre elas [3]? Pra entender, vamos pensar na diferença entre o significado de cada palavra.
“Internacionalização” remete a “internacionalizar” algo, neste caso um software. Isso quer dizer: torná-lo acessível para outras nacionalidades e idiomas. Um sistema internacional é um padrão reconhecido e compreendido por diversos países do globo. O famoso S.I. - Sistema Internacional de Medidas - por exemplo. Um software internacional é um software acessível por diversos países do globo, principalmente no aspecto do idioma.
“Localização” por sua vez, passa a impressão do mesmo significado, mas remete às particularidades de determinadas localidades. Um país como os EUA, Rússia, China ou Brasil, com superfície continental e culturas variadas, pode ter diversos padrões de formatação diferentes, um para cada localidade.
Apesar de o argumento valer também em ordem inversa (pois diversos países possuem mais de um idioma e padrões de formatação), os dois termos são usados no Django em direções opostas: a “internacionalização” generaliza o software, tornando termos únicos legíveis em vários idiomas através da tradução on-line desses termos. Já a “localização” torna determinadas informações especificas para cada localidade, respeitando o jeito de cada um.
O que há de novo
Os recursos de Internacionalização do Django [4] permanecem como estavam. É uma solução pioneira e vencedora, e as alterações foram apenas melhorias aqui ou ali. Mas agora entraram as novas funções de Localização [2], a começar pelas novas settings:
- DATE_INPUT_FORMATS - determina uma tupla com os formatos aceitos para campos de data em formulários. O primeiro item da tupla será usado como default;
- DATETIME_INPUT_FORMATS - determina uma tupla com os formatos aceitos para campos de data/hora em formulários. O primeiro item da tupla será usado como default;
- DECIMAL_SEPARATOR - determina qual é o separador decimal para valores monetários (nos EUA o padrão é o ponto e no Brasil é uma vírgula);
- FIRST_DAY_OF_WEEK - determina qual é o primeiro dia da semana (em alguns países o padrão é a segunda-feira - 1);
- FORMAT_MODULE_PATH - determina o pacote em Python que contém os módulos para customização das demais settings desta lista. Isto é importante para mudar as configurações padrão e acredite: você vai precisar;
- NUMBER_GROUPING - determina o intervalo de algarismos que deve-se usar um separador de milhar em valores monetários. Normalmente são 3;
- SHORT_DATE_FORMAT - formato “curto” padrão para data em templates;
- SHORT_DATETIME_FORMAT - formato “curto” padrão para data/hora em templates;
- THOUSAND_SEPARATOR - caractere separador de milhar para valores monetários (nos EUA o padrão é uma vírgula e no Brasil é um ponto);
- TIME_INPUT_FORMATS - determina uma tupla com os formatos aceitos para campos de hora em formulários. O primeiro item da tupla será usado como default;
- USE_L10N - caso seja True, determina que o seu projeto habilite a localização (para sistemas brasileiros, é necessário, da mesma forma como o USE_I18N, mas para softwares estritamente americanos, pode ser False para tornar o projeto mais leve);
- USE_THOUSAND_SEPARATOR - caso seja True, determina que o projeto deve formatar e aceitar valores monetários com separador de milhar.
Settings antigas, mas que eram praticamente ignoradas pelo Django em termos práticos, também foram corrigidas e adaptadas às novas funções. São elas:
- DATE_FORMAT
- DATETIME_FORMAT
- TIME_FORMAT
Todas as três settings acima agora funcionam com o propósito que sempre alegaram em sua documentação, ou seja: são usadas para formatar data, data/hora e hora em templates.
Habilitando a Localização em seu projeto
A setting USE_L10N é desabilitada por padrão, e deve ser declarada no arquivo settings.py como True.
Somente isso é suficiente para que tudo funcione em 99%.
O padrão para datas ainda prioriza o formato “%Y-%m-%d“ acima do mais habitual “%d/%m/%Y“. Para corrigir isso você deve fazer os seguintes passos:
Criar arquivos e pastas na seguinte estrutura:
seu_projeto/ formats/ __init__.py pt_BR/ __init__.py formats.pyO arquivo “formats.py” deve conter o seguinte:
DATE_INPUT_FORMATS = ('%d/%m/%Y', '%d/%m/%y', '%Y-%m-%d',)Definir a setting FORMAT_MODULE_PATH com o valor 'formats';
Feito isso, seus forms vão trabalhar naturalmente com o formato de data “dia/mês/ano”.

Agora use a sua criatividade para expandir o que vimos hoje de formas diferentes, e seja feliz com os novos recursos de localização do Django ;)