ASP.NET Core: solucionando erros de conversão/formatação com Localization

Renato Groffe
Sep 3, 2018 · 3 min read

No desenvolvimento de aplicações Web são extremamente comuns tarefas como a formatação de valores financeiros e datas, bem como conversões de strings para tipos numéricos. Muitos profissionais costumam configurar seus computadores com os formatos regionais considerados ideais para os projetos que estão desenvolvendo, porém não se atentam à hipótese de uso de padrões diferentes nos computadores que hospedarão tais soluções.

A seguir temos um exemplo de site desenvolvido com o ASP.NET Core 2.1, sendo que o mesmo possibilitará a conversão de distâncias em milhas para o equivalente em Km:

Um valor de 100,5 milhas foi convertido para 161,7045 Km, seguindo o comportamento esperado para o projeto. Vale ressaltar que este print foi obtido a partir da execução local da aplicação, em uma máquina na qual foram selecionadas as configurações regionais válidas para o Brasil.

E se utilizarmos Docker com o objetivo de executar este mesmo site a partir de um container Linux?

Na próxima imagem é possível observar o resultado disto (com a execução do container na porta 1234), em que aparentemente a conversão não aconteceu da forma imaginada:

Importante recordar que nas configurações norte-americanas o caracter “.” (ponto) corresponde ao separador decimal, ao passo que “,” (vírgula) seria o separador de milhar. Assim o valor esperado de 161,7045 Km se transformou em 1617.045 Km (além de estar com sua formatação diferente do teste inicial).

Como podemos então solucionar isto?

A resposta passa pelo suporte a Localization presente no ASP.NET Core através do middleware UseRequestLocalization. Uma chamada a esta operação no método Configure na classe Startup permitirá especificar a cultura padrão (pt-BR no caso desta aplicação de exemplo), evitando assim problemas de conversão/formatação:

A geração de uma nova imagem após esse ajuste e a consequente criação de um container permitirão a execução de um teste em conformidade com o comportamento originalmente previsto:

Os fontes da aplicação utilizada como base neste artigo estão disponíveis no GitHub:

https://github.com/renatogroffe/Selenium-DotNetCore2.1-xUnit-VSCode


E aproveito este espaço para deixar aqui um convite.

Dia 03/09/2018 (segunda-feira) às 21h30 - horário de Brasília - teremos mais um hangout no Canal .NET. O tema desta vez será acessibilidade em aplicações, com a presença do MVP Alexandre Santos Costa (Magoo).

Para efetuar a sua inscrição acesse a página do evento no Facebook ou então o Meetup. A transmissão acontecerá via YouTube, em um link a ser divulgado em breve.


Renato Groffe

Written by

Microsoft Most Valuable Professional (MVP), Multi-Plataform Technical Audience Contributor (MTAC), Software Engineer, Technical Writer and Speaker

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade