Humanizer in .Net

Furkan Güngör

--

Elinizdeki projeye daha kullanıcı dostu bir deneyim kazandırmak, veri gösterimlerini doğal ve anlaşılır hale getirmek istiyorsanız, .NET ekosisteminin güçlü kütüphanelerinden biri olan Humanizer tam da bu ihtiyaca yönelik çözümler sunmaktadır. Bu kütüphane sayesinde tarih ve zaman dilimlerini, sayısal verileri, metinleri ve daha pek çok farklı veri türünü insan diline yakın bir formata dönüştürebiliriz. Kullanıcıların veriyi yalnızca görmekle kalmayıp sezgisel olarak da anlayabilmesini sağlayan Humanizer, yazılım geliştiricilere esneklik sağlarken kodu da daha okunabilir hale getirir. Bu yazıda, .NET ortamında Humanizer kütüphanesinin sunduğu tüm özellikleri detaylıca inceleyip, kullanım örnekleri ve potansiyel senaryolarla nasıl fark yaratabileceğini keşfedeceğiz.

Humanizer’ı kullanmak için NuGet Package Manager veya dotnet CLI kullanabilirsiniz:

dotnet add package Humanizer

Bu kütüphane çeşitli veri türlerini user friendly formata dönüştürmek için oldukça fazla özellik sunar. Bu makalede benim en sık kullandığım özellikleri listeleyip örnek kod blokları ile konuyu pekiştirmeye çalışacağım.

Date & Time Humanization

  • Humanize: Tarih ve saat bilgilerini "2 saat önce" veya "3 gün sonra" gibi doğal bir biçime dönüştürür.
  • Dehumanize: İnsan diline yakın bir ifadeyi DateTime ya da TimeSpan nesnesine dönüştürür.
DateTime.Now.AddDays(-5).Humanize(); // "5 gün önce"
"5 gün önce".Dehumanize(); // Tarihi DateTime'a çevirir

TimeSpan Humanization

  • Humanize: TimeSpan nesnesini "3 saat 30 dakika" gibi anlaşılır formata dönüştürür.
TimeSpan.FromHours(3.5).Humanize(); // "3 saat 30 dakika"

Number to Words

  • ToWords: Sayıları sözcüklere dönüştürür ve çeşitli dillerde destek sağlar.
  • ToOrdinalWords: Sayıları sıralama ekleriyle birlikte sözcüklere çevirir ("first", "second").
1234.ToWords(); // "bin iki yüz otuz dört"
1.ToOrdinalWords(); // "birinci"

Inflections

  • Pluralize: İngilizce kelimeleri çoğul hale getirir.
  • Singularize: Çoğul İngilizce kelimeleri tekil hale getirir.
  • Camelize, Pascalize, Kebaberize: İngilizce kelimeleri farklı biçimlere çevirir (Pascal Case, Camel Case, kebab-case).
"person".Pluralize(); // "people"
"People".Singularize(); // "Person"
"camel case example".Camelize(); // "camelCaseExample"

DateTime to Words

  • ToOrdinalWords: Bir tarih veya zaman değerini "first", "second" gibi sıralamalı kelimelerle ifade eder.
  • Ordinalize: Bir sayıyı sıralı hale getirir ("1st", "2nd").
DateTime.Now.AddDays(-3).Humanize(); // "3 gün önce"
1.Ordinalize(); // "1st"
int number = 21;
string result = number.ToOrdinalWords(); // "twenty-first"

ByteSize Humanization

Bytes(): Byte değerlerini insan dostu hale getirir ("1 KB", "2 MB").

1024L.Bytes().Humanize(); // "1 KB"

Fixed-Case Transformations

Transform: Metinleri Title Case, Upper Case, Lower Case gibi biçimlere dönüştürür.

"example text".Transform(To.TitleCase); // "Example Text"

Roman Numerals

  • ToRoman: Sayıları Roma rakamlarına dönüştürür.
  • FromRoman: Roma rakamlarını sayıya çevirir.
10.ToRoman(); // "X"
"X".FromRoman(); // 10

Truncation

  • Truncate: Uzun metinleri belirli bir uzunluğa göre kısaltır.
  • TruncateAtWord: Kısaltmayı kelime bazında yapar, tam bir kelime sınırında keser.
"Bu çok uzun bir metin".Truncate(10); // "Bu çok u..."

Collection Humanization

Humanize: Koleksiyonları insan dostu bir listeye dönüştürür, örneğin, "elma, armut ve üzüm".

new[] { "elma", "armut", "üzüm" }.Humanize(); // "elma, armut ve üzüm"

Enum Humanization

Humanize: Enum değerlerini okunabilir bir formata dönüştürür.

MyEnum.OptionOne.Humanize(); // "Option one"

Ordinalization

Ordinalize: Sayılara sıralama eki ekler ("1st", "2nd", "3rd").

5.Ordinalize(); // "5th"

Dehumanize

Dehumanize: İnsan dostu formattaki verileri orijinal veri formatına döndürür (örn. "3 gün önce" → DateTime).

"3 days ago".Dehumanize(); // DateTime formatına çevirir

RegexReplace

RegexReplace: Düzenli ifadeler ile metin üzerinde belirli kısımları değiştirme.

"123abc".RegexReplace(@"\d+", ""); // "abc"

Duration Formatting

Belirli bir süreyi insan dostu bir biçimde göstermek için kullanılır.

TimeSpan duration = TimeSpan.FromMinutes(90);
duration.Humanize(); // "1 saat, 30 dakika"

TimeSpan With CultureInfo

TimeSpan zaman = TimeSpan.FromDays(3);
string sonuc = zaman.Humanize(culture: new System.Globalization.CultureInfo("tr-TR"));
// "3 gün" olarak çıktı verir.

ToQuantity

Bir kelimeye miktar eklemek için ToQuantity fonksiyonu kullanılabilir. Çoğul hale getirmek veya tekil formda tutmak gibi durumlar için idealdir.

string kelime1 = "apple".ToQuantity(1); // "1 apple"
string kelime2 = "apple".ToQuantity(5); // "5 apples"

DateOnly ve TimeOnly

.NET 6 ile gelen DateOnly ve TimeOnly türleri için de Humanizer desteği bulunmaktadır.

var tarih = DateOnly.FromDateTime(DateTime.Now.AddMonths(-1));
string sonuc = tarih.Humanize(); // "bir ay önce"

var zaman = TimeOnly.FromDateTime(DateTime.Now.AddHours(-2));
string sonuc2 = zaman.Humanize(); // "2 saat önce"

Metric Units

Farklı metrik birimler arasında dönüştürme yaparak veriyi daha anlaşılır hale getirebilirsiniz.

double distanceInMeters = 1500;
string sonuc = distanceInMeters.ToMetric(); // "1.5 km"

Bu kütüphane yazılım geliştiriciler için çıktıların user friendly bir formatta olmasını sağlar ve bu konuda oldukça fazla özelliğe sahiptir. Ben kendi projelerimde muhakkak bu senaryolar için humanizer kütüphanesini tercih ediyorum.

Kütüphane hoşuna gittiyse ve daha detaylı araştırmak istiyorsanız aşağıdaki linki ziyaret edebilirsiniz. 👋

https://github.com/Humanizr/Humanizer

--

--

No responses yet