Fala galera, quem nunca precisou manipular vários tipos de dados para strings? Pois é, hoje vou apresentar para vocês a biblioteca Humanizer.

Humanizer é uma ótima biblioteca para obter representações legíveis por nós, meros seres humanos para strings, números e datas em .Net. Cortar strings até um certo tamanho ou transformar um TimeSpan em “uma hora” não é mágica. No entanto, tentar fazer todo o trabalho por conta própria levará um tempo que o maravilhoso Humanizer já gastou. Vamos ver alguns casos de uso em que essa biblioteca provou ser de grande ajuda.

Instalação

Abra seu projeto no Solution Explorer no Visual Studio, clique com o botão direito do mouse em References e selecione “Manage NuGet Packages…” para procurar os pacotes do NuGet. Procure por Humanizer e instale este pacote:

Instalação da versão em português

Após incluir a biblioteca em sua referência de projeto, é hora de colocar a mão na massa e ver do que o Humanizer é capaz de fazer por nós… Show me the code 🙂

Trabalhando com DateTime e TimeSpan

Algumas implementações e suas saídas
public static void Datas()
        {
            var agora = DateTime.UtcNow;
            Console.WriteLine(agora.AddHours(-30).Humanize()); //ontem
            Console.WriteLine(agora.AddHours(25).Humanize()); //amanhã
            Console.WriteLine(agora.AddMinutes(-2).Humanize()); //2 minutos atrás
            Console.WriteLine(agora.AddMinutes(2).Humanize()); //em um minuto 
            Console.WriteLine(agora.AddMonths(-11).Humanize()); //11 meses atrás
            Console.WriteLine(agora.AddMonths(-13).Humanize()); //um ano atrás 
            Console.WriteLine(agora.AddYears(-10).Humanize()); //10 anos atrás
            Console.WriteLine(TimeSpan.FromMinutes(2).Humanize()); //2 minutos
            Console.WriteLine(TimeSpan.FromMinutes(-2).Humanize()); //2 minutos
            Console.WriteLine(TimeSpan.FromDays(28).Humanize()); //4 semanas
            Console.WriteLine(TimeSpan.FromDays(365 * 4).Humanize()); //208 semanas
            Console.WriteLine(TimeSpan.FromMilliseconds(1299630020).Humanize()); //2 semanas
            Console.WriteLine(TimeSpan.FromMilliseconds(1299630020).Humanize(3)); //2 semanas, 1 dia, 1 hora
            Console.WriteLine(TimeSpan.FromMilliseconds(1).Humanize()); //1 milisegundo
            Console.WriteLine(TimeSpan.FromMilliseconds(2).Humanize()); //2 milisegundos
            Console.WriteLine(TimeSpan.FromDays(1).Humanize()); //1 dia
            Console.WriteLine(TimeSpan.FromDays(2).Humanize()); //2 dias
            Console.WriteLine(TimeSpan.FromDays(16).Humanize()); //2 semanas
            DateTime dataFim = new DateTime(2019, 6, 30);
            TimeSpan diferenca = dataFim - agora;
            Console.WriteLine("Em " + TimeSpanHumanizeExtensions.Humanize(diferenca)); //Em 14 semanas
            Console.WriteLine(DateTimeOffset.UtcNow.AddHours(1).Humanize()); // em um hora
        }

Unidades de Medida Computacionais

Pode ser útil saber o tamanho de um arquivo antes de tentar baixá-lo em uma conexão móvel. No entanto, apenas mostrar o tamanho em bytes pode não ajudar seus usuários. O Humanizer oferece sua própria classe para representar tamanhos de arquivo que podem ser convertidos conforme necessário ou mostrados novamente em um formato legível.

Medidas Computacionais
private static void Medidas()
{
    var filesize = (10).Megabytes();

    Console.WriteLine(filesize.Kilobytes); //10240
    Console.WriteLine(filesize.Gigabytes);//0.009765625

    Console.WriteLine((10).Megabytes().Humanize());//10 MB
    Console.WriteLine((1024).Megabytes().Humanize());//1 GB
    Console.WriteLine((1024 * 1024 * 500).Kilobytes().Humanize());//500 GB
}

Truncando Strings

Muitas vezes precisamos trabalhar com strings longas e adicionar aqueles 3 pontinhos (…) no final para dar a entender que o texto é longo, o método Truncate do Humanizer faz esse trabalho para nós. S2 🙂

using System;
using Humanizer;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Truncar();
            Console.ReadLine();
        }

        private static void Truncar()
        {
            Console.WriteLine("Texto longo para truncar".Truncate(10,"...", Truncator.FixedLength));
            Console.WriteLine("Texto longo para truncar".Truncate(10, "---", Truncator.FixedLength));
            Console.WriteLine("Texto longo para truncar".Truncate(8, "...",Truncator.FixedNumberOfCharacters));
            Console.WriteLine("Texto longo para truncar".Truncate(6, "---", Truncator.FixedNumberOfCharacters));
            Console.WriteLine("Texto longo para truncar".Truncate(2, Truncator.FixedNumberOfWords));
            Console.WriteLine("Texto longo para truncar".Truncate(2, "...", Truncator.FixedNumberOfWords));
            Console.WriteLine("abcdef".Truncate(4, "*",Truncator.FixedLength));

            Console.WriteLine("Texto longo para truncar".Truncate(10, "...", Truncator.FixedLength, TruncateFrom.Left));
            Console.WriteLine("Texto longo para truncar".Truncate(8, "...", Truncator.FixedNumberOfCharacters, TruncateFrom.Left));
        }
   }
}

Adicionando novas palavras

As vezes, você pode precisar adicionar uma regra do vocabulário de singularização/pluralização.

Incluindo a palavra Homem no Plural e Singular

Quantidades com Humanizer

Como podemos observar temos muitas formas de utilizar essa fantástica biblioteca, abaixo deixo mais alguns exemplos de uso com quantidades.

Trabalhando com quantidades

Strings e Enum

E claro que temos o bom e velho trabalho com String e Enum.

using System;
using Humanizer;
using System.Globalization;
using Humanizer.Inflections;
namespace ConsoleApp1
{
    using System.ComponentModel;

    class Program
    {
        static void Main(string[] args)
        {
            
            Vocabularies.Default.AddPlural("homem", "homens");
            Vocabularies.Default.AddSingular("homens", "homem");
            Vocabularies.Default.AddPlural("real", "reais");
            GeralString();
            Console.ReadLine();
        }

        public enum EnumUnderTest
        {
            [Description("Custom description")]
            MemberWithDescriptionAttribute,
            MemberWithoutDescriptionAttribute,
            ALLCAPITALS
        }
        private static void GeralString()
        {
            Console.WriteLine("Quero_retornar_texto_Aqui".Humanize(LetterCasing.Title));
            Console.WriteLine("QueroRetornarTextoAqui".Humanize(LetterCasing.Title));
            Console.WriteLine("QueroRetornarTextoAqui".Humanize(LetterCasing.LowerCase));
            Console.WriteLine("quero_retornar texto aqui".Camelize());
            Console.WriteLine("quero_retornar texto aqui".Pascalize());
            Console.WriteLine("UmTexto".Underscore());
            Console.WriteLine("um_texto".Dasherize());
            Console.WriteLine("um_texto".Hyphenate());
            Console.WriteLine("UmTexto".Kebaberize());
            Console.WriteLine(1.ToWords());
            Console.WriteLine(155.ToWords());
            Console.WriteLine(3785.ToWords());
            Console.WriteLine(EnumUnderTest.MemberWithDescriptionAttribute.Humanize());
            Console.WriteLine(EnumUnderTest.MemberWithoutDescriptionAttribute.Humanize());
            Console.WriteLine(EnumUnderTest.MemberWithoutDescriptionAttribute.Humanize().Transform(To.TitleCase));
        }
  }
}

Conclusão

O Humanizer é uma ótima ajuda quando você precisa formatar a saída em um formato legível por humanos. Não parece muito, mas é muito seguro quando você usa essa biblioteca, em vez de escrever o código por conta própria. Eu estou apenas arranhando a superfície do Humanizer, passando por algumas tarefas corriqueiras. Há também exemplos de uso no ASP.NET MVC em suas Views.

Espero ter ajudado, aproveita e da uma olhada no Humanizer e agradeça ao autor no Twitter enquanto você está por aqui! Valeu Dev!

Por: Kleber Silva