Humanizer in .Net
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 ifadeyiDateTime
ya daTimeSpan
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. 👋