HumanizerHumanizer memenuhi semua kebutuhan .NET Anda untuk memanipulasi dan menampilkan string, enum, tanggal, waktu, rentang waktu, angka dan jumlah.
Anda dapat menginstal Humanizer sebagai paket Nuget:
Bahasa Inggris saja : Humanizer.Core
Semua bahasa: Humanizer
Kerangka kerja berikut didukung: net4.8, net6, net7, dan net8
Catatan: Nuget juga menargetkan NetStandard2. Ini untuk memungkinkan skenario di mana NetStandard2 diperlukan. Misalnya Roslyn Analyzers atau MSBuild Tasks. Kerangka kerja lain (selain yang tercantum di atas) yang dapat mengkonsumsi netstandard2 (contoh net4.6.1 hingga net 4.7.2) tidak didukung. Misalnya net4.6.1 hingga net4.7.2 tidak didukung.
Simbol humanizer juga sumber diindeks dengan Sourcelink dan termasuk dalam paket sehingga Anda dapat melangkah melalui kode Humanizer sambil men -debug kode Anda.
Anda memilih paket mana berdasarkan apa yang Anda instal. Secara default, paket Humanizer 2.0 utama menginstal semua bahasa yang didukung persis seperti di 1.x. Jika Anda tidak yakin, maka cukup gunakan paket Humanizer utama.
Inilah pilihannya:
Humanizer utama. Ini menarik Humanizer.Core dan semua paket bahasa.Humanizer.Core . Hanya sumber daya bahasa Inggris yang akan tersediaHumanizer.Core.fr . Anda dapat menyertakan beberapa bahasa dengan menginstal namun banyak paket bahasa yang Anda inginkan.Penjelasan terperinci tentang cara kerjanya ada di komentar di sini.
Humanize String Extensions memungkinkan Anda mengubah string yang terkomputerisasi menjadi yang lebih mudah dibaca. Fondasi ini ditetapkan dalam kerangka kerja BDDFY di mana nama kelas, nama metode dan properti diubah menjadi kalimat yang dapat dibaca manusia.
"PascalCaseInputStringIsTurnedIntoSentence" . Humanize ( ) => "Pascal case input string is turned into sentence"
"Underscored_input_string_is_turned_into_sentence" . Humanize ( ) => "Underscored input string is turned into sentence"
"Underscored_input_String_is_turned_INTO_sentence" . Humanize ( ) => "Underscored input String is turned INTO sentence" Perhatikan bahwa string yang hanya berisi huruf besar, dan hanya terdiri dari satu kata, selalu diperlakukan sebagai akronim (terlepas dari panjangnya). Untuk menjamin bahwa setiap string sewenang -wenang akan selalu dimanusiakan, Anda harus menggunakan transformasi (lihat metode Transform di bawah):
// acronyms are left intact
"HTML" . Humanize ( ) => "HTML "
// any unbroken upper case string is treated as an acronym
" HUMANIZER" . Humanize ( ) => "HUMANIZER"
"HUMANIZER" . Transform ( To . LowerCase , To . TitleCase ) => "Humanizer"Anda juga dapat menentukan casing huruf yang diinginkan:
"CanReturnTitleCase" . Humanize ( LetterCasing . Title ) => "Can Return Title Case "
" Can_return_title_Case" . Humanize ( LetterCasing . Title ) => "Can Return Title Case"
"CanReturnLowerCase" . Humanize ( LetterCasing . LowerCase ) => "can return lower case"
"CanHumanizeIntoUpperCase" . Humanize ( LetterCasing . AllCaps ) => "CAN HUMANIZE INTO UPPER CASE"API
LetterCasingdan metode yang menerimanya adalah warisan dari v0.2 ERA dan akan digunakan di masa depan. Alih -alih itu, Anda dapat menggunakan metodeTransformyang dijelaskan di bawah ini.
Sama seperti Anda dapat memanusiakan komputer yang ramah menjadi string ramah manusia, Anda dapat merendahkan manusia yang ramah manusia menjadi komputer yang ramah komputer:
"Pascal case input string is turned into sentence" . Dehumanize ( ) => "PascalCaseInputStringIsTurnedIntoSentence" Ada metode Transform yang menggantikan LetterCasing , ApplyCase dan Humanize kelebihan yang menerima LetterCasing . Tanda Tangan Metode Transformasi adalah sebagai berikut:
string Transform ( this string input , params IStringTransformer [ ] transformers ) Dan ada beberapa implementasi di luar kotak IStringTransformer untuk casing huruf:
"Sentence casing" . Transform ( To . LowerCase ) => "sentence casing "
" Sentence casing ".Transform(To.SentenceCase) => " Sentence casing "
"Sentence casing" . Transform ( To . TitleCase ) => "Sentence Casing"
"Sentence casing" . Transform ( To . UpperCase ) => "SENTENCE CASING" LowerCase adalah properti statis publik To kelas yang mengembalikan contoh kelas ToLowerCase pribadi yang mengimplementasikan IStringTransformer dan tahu cara mengubah string menjadi huruf kecil.
Manfaat menggunakan Transform dan IStringTransformer lebih dari ApplyCase dan LetterCasing adalah bahwa LetterCasing adalah enum dan Anda terbatas untuk menggunakan apa yang ada dalam kerangka kerja sementara IStringTransformer adalah antarmuka yang dapat Anda terapkan dalam basis kode Anda sekali dan menggunakannya dengan metode Transform yang memungkinkan untuk ekstensi yang mudah.
Anda dapat memotong string menggunakan metode Truncate :
"Long text to truncate" . Truncate ( 10 ) => "Long text…" Secara default karakter '…' digunakan untuk memotong string. Keuntungan menggunakan karakter '…' alih -alih "..." adalah bahwa yang pertama hanya mengambil satu karakter dan dengan demikian memungkinkan lebih banyak teks untuk ditampilkan sebelum pemotongan. Jika Anda mau, Anda juga dapat memberikan string pemotongan Anda sendiri:
"Long text to truncate" . Truncate ( 10 , "---" ) => "Long te -- - " Strategi pemotongan default, Truncator.FixedLength , adalah untuk memotong string input ke panjang tertentu, termasuk panjang string pemotongan. Ada dua strategi pemicu lagi yang tersedia: satu untuk sejumlah karakter (alfa-numerik) yang tetap dan satu untuk sejumlah kata. Untuk menggunakan pemicu spesifik saat memotong, dua metode Truncate yang ditunjukkan dalam contoh sebelumnya semua memiliki kelebihan beban yang memungkinkan Anda untuk menentukan instance ITruncator untuk digunakan untuk pemotongan. Berikut adalah contoh tentang cara menggunakan tiga pemicu yang disediakan:
"Long text to truncate" . Truncate ( 10 , Truncator . FixedLength ) => "Long text…"
"Long text to truncate" . Truncate ( 10 , "---" , Truncator . FixedLength ) => "Long te---"
"Long text to truncate" . Truncate ( 6 , Truncator . FixedNumberOfCharacters ) => "Long t…"
"Long text to truncate" . Truncate ( 6 , "---" , Truncator . FixedNumberOfCharacters ) => "Lon---"
"Long text to truncate" . Truncate ( 2 , Truncator . FixedNumberOfWords ) => "Long text…"
"Long text to truncate" . Truncate ( 2 , "---" , Truncator . FixedNumberOfWords ) => "Long text---" Perhatikan bahwa Anda juga dapat menggunakan Buat Pemicu Anda Sendiri dengan mengimplementasikan antarmuka ITruncator .
Ada juga opsi untuk memilih apakah akan memotong string dari awal ( TruncateFrom.Left ) atau akhir ( TruncateFrom.Right ). Default adalah hak seperti yang ditunjukkan pada contoh di atas. Contoh di bawah ini menunjukkan cara memotong dari awal string:
"Long text to truncate" . Truncate ( 10 , Truncator . FixedLength , TruncateFrom . Left ) => "… truncate"
"Long text to truncate" . Truncate ( 10 , "---" , Truncator . FixedLength , TruncateFrom . Left ) => "---runcate"
"Long text to truncate" . Truncate ( 10 , Truncator . FixedNumberOfCharacters , TruncateFrom . Left ) => "…o truncate"
"Long text to truncate" . Truncate ( 16 , "---" , Truncator . FixedNumberOfCharacters , TruncateFrom . Left ) => "---ext to truncate"
"Long text to truncate" . Truncate ( 2 , Truncator . FixedNumberOfWords , TruncateFrom . Left ) => "…to truncate"
"Long text to truncate" . Truncate ( 2 , "---" , Truncator . FixedNumberOfWords , TruncateFrom . Left ) => "---to truncate" Menelepon ToString secara langsung pada anggota ENUM biasanya menghasilkan output yang kurang ideal untuk pengguna. Solusi untuk ini biasanya untuk menggunakan anotasi data DescriptionAttribute dan kemudian membacanya saat runtime untuk mendapatkan output yang lebih ramah. Itu adalah solusi yang bagus; Tetapi lebih sering daripada tidak, kita hanya perlu menempatkan beberapa ruang di antara kata -kata anggota enum - yang merupakan String.Humanize() yang baik. Untuk enum seperti:
public enum EnumUnderTest
{
[ Description ( "Custom description" ) ]
MemberWithDescriptionAttribute ,
MemberWithoutDescriptionAttribute ,
ALLCAPITALS
}Anda akan mendapatkan:
// DescriptionAttribute is honored
EnumUnderTest . MemberWithDescriptionAttribute . Humanize ( ) => "Custom description"
// In the absence of Description attribute string.Humanizer kicks in
EnumUnderTest . MemberWithoutDescriptionAttribute . Humanize ( ) => "Member without description attribute"
// Of course you can still apply letter casing
EnumUnderTest . MemberWithoutDescriptionAttribute . Humanize ( ) . Transform ( To . TitleCase ) => "Member Without Description Attribute" Anda tidak terbatas pada DescriptionAttribute untuk deskripsi khusus. Atribut apa pun yang diterapkan pada anggota enum dengan jumlah properti string Description . Ini untuk membantu dengan platform dengan DescriptionAttribute yang hilang dan juga untuk mengizinkan subclass dari DescriptionAttribute .
Anda bahkan dapat mengonfigurasi nama properti atriat untuk digunakan sebagai deskripsi.
Configurator.EnumDescriptionPropertyLocator = p => p.Name == "Info"
Jika Anda perlu memberikan deskripsi terlokalisasi, Anda dapat menggunakan anotasi data DisplayAttribute .
public enum EnumUnderTest
{
[ Display ( Description = "EnumUnderTest_Member" , ResourceType = typeof ( Project . Resources ) ) ]
Member
}Anda akan mendapatkan:
EnumUnderTest . Member . Humanize ( ) => "content" // from Project.Resources found under "EnumUnderTest_Member" resource keyMudah -mudahan ini akan membantu menghindari enum sampah dengan atribut yang tidak perlu!
Mengusir manusia ke dalam enum yang awalnya dimanusiakan dari! API terlihat seperti:
public static TTargetEnum DehumanizeTo < TTargetEnum > ( this string input )Dan penggunaannya adalah:
"Member without description attribute" . DehumanizeTo < EnumUnderTest > ( ) => EnumUnderTest . MemberWithoutDescriptionAttribute Dan sama seperti API Humanize, itu menghormati atribut Description . Anda tidak harus memberikan casing yang Anda berikan selama humanisasi: itu memahaminya.
Ada juga mitra non-generik ketika enum asli tidak diketahui pada waktu kompilasi:
public static Enum DehumanizeTo ( this string input , Type targetEnum , NoMatch onNoMatch = NoMatch . ThrowsException )yang dapat digunakan seperti:
"Member without description attribute" . DehumanizeTo ( typeof ( EnumUnderTest ) ) => EnumUnderTest . MemberWithoutDescriptionAttribute Secara default kedua metode melempar NoMatchFoundException ketika mereka tidak dapat mencocokkan input yang disediakan dengan target enum. Dalam metode non-generik, Anda juga dapat meminta metode untuk mengembalikan NULL dengan mengatur parameter opsional kedua ke NoMatch.ReturnsNull .
Anda dapat Humanize instance DateTime atau DateTimeOffset dan mendapatkan kembali string yang menceritakan seberapa jauh ke belakang atau maju dalam waktu itu adalah:
DateTime . UtcNow . AddHours ( - 30 ) . Humanize ( ) => "yesterday"
DateTime . UtcNow . AddHours ( - 2 ) . Humanize ( ) => "2 hours ago"
DateTime . UtcNow . AddHours ( 30 ) . Humanize ( ) => "tomorrow"
DateTime . UtcNow . AddHours ( 2 ) . Humanize ( ) => "2 hours from now"
DateTimeOffset . UtcNow . AddHours ( 1 ) . Humanize ( ) => "an hour from now" Humanizer mendukung tanggal lokal dan UTC serta tanggal dengan offset ( DateTimeOffset ). Anda juga dapat memberikan tanggal Anda ingin tanggal input dibandingkan dengan. Jika null, itu akan menggunakan tanggal saat ini sebagai basis perbandingan. Juga, budaya untuk digunakan dapat ditentukan secara eksplisit. Jika tidak, budaya UI utas saat ini digunakan. Ini tanda tangan API:
public static string Humanize ( this DateTime input , bool utcDate = true , DateTime ? dateToCompareAgainst = null , CultureInfo culture = null )
public static string Humanize ( this DateTimeOffset input , DateTimeOffset ? dateToCompareAgainst = null , CultureInfo culture = null )Banyak lokalisasi tersedia untuk metode ini. Berikut beberapa contoh:
// In ar culture
DateTime . UtcNow . AddDays ( - 1 ) . Humanize ( ) => "أمس"
DateTime . UtcNow . AddDays ( - 2 ) . Humanize ( ) => "منذ يومين"
DateTime . UtcNow . AddDays ( - 3 ) . Humanize ( ) => "منذ 3 أيام"
DateTime . UtcNow . AddDays ( - 11 ) . Humanize ( ) => "منذ 11 يوم"
// In ru-RU culture
DateTime . UtcNow . AddMinutes ( - 1 ) . Humanize ( ) => "минуту назад"
DateTime . UtcNow . AddMinutes ( - 2 ) . Humanize ( ) => "2 минуты назад"
DateTime . UtcNow . AddMinutes ( - 10 ) . Humanize ( ) => "10 минут назад"
DateTime . UtcNow . AddMinutes ( - 21 ) . Humanize ( ) => "21 минуту назад"
DateTime . UtcNow . AddMinutes ( - 22 ) . Humanize ( ) => "22 минуты назад"
DateTime . UtcNow . AddMinutes ( - 40 ) . Humanize ( ) => "40 минут назад" Ada dua strategi untuk DateTime.Humanize : yang default seperti yang terlihat di atas dan yang berbasis presisi. Untuk menggunakan strategi berbasis presisi, Anda perlu mengonfigurasinya:
Configurator . DateTimeHumanizeStrategy = new PrecisionDateTimeHumanizeStrategy ( precision : .75 ) ;
Configurator . DateTimeOffsetHumanizeStrategy = new PrecisionDateTimeOffsetHumanizeStrategy ( precision : .75 ) ; // configure when humanizing DateTimeOffsetPresisi default diatur ke .75 tetapi Anda dapat melewati ketepatan yang Anda inginkan juga. Dengan presisi diatur ke 0,75:
44 seconds => 44 seconds ago / from now
45 seconds => one minute ago / from now
104 seconds => one minute ago / from now
105 seconds => two minutes ago / from now
25 days => a month ago / from now Tidak ada dehumanisasi untuk tanggal karena Humanize adalah transformasi yang lossy dan tanggal ramah manusia tidak dapat dibalikkan
Anda dapat memanggil Humanize pada TimeSpan untuk mendapatkan representasi ramah manusia untuk itu:
TimeSpan . FromMilliseconds ( 1 ) . Humanize ( ) => "1 millisecond"
TimeSpan . FromMilliseconds ( 2 ) . Humanize ( ) => "2 milliseconds"
TimeSpan . FromDays ( 1 ) . Humanize ( ) => "1 day"
TimeSpan . FromDays ( 16 ) . Humanize ( ) => "2 weeks" Ada parameter precision opsional untuk TimeSpan.Humanize yang memungkinkan Anda untuk menentukan ketepatan dari nilai yang dikembalikan. Nilai default dari precision adalah 1 yang berarti hanya unit waktu terbesar yang dikembalikan seperti yang Anda lihat di TimeSpan.FromDays(16).Humanize() . Berikut adalah beberapa contoh menentukan presisi:
TimeSpan . FromDays ( 1 ) . Humanize ( precision : 2 ) => "1 day" // no difference when there is only one unit in the provided TimeSpan
TimeSpan . FromDays ( 16 ) . Humanize ( 2 ) => "2 weeks, 2 days"
// the same TimeSpan value with different precision returns different results
TimeSpan . FromMilliseconds ( 1299630020 ) . Humanize ( ) => "2 weeks"
TimeSpan . FromMilliseconds ( 1299630020 ) . Humanize ( 3 ) => "2 weeks, 1 day, 1 hour"
TimeSpan . FromMilliseconds ( 1299630020 ) . Humanize ( 4 ) => "2 weeks, 1 day, 1 hour, 30 seconds"
TimeSpan . FromMilliseconds ( 1299630020 ) . Humanize ( 5 ) => "2 weeks, 1 day, 1 hour, 30 seconds, 20 milliseconds" Secara default saat menggunakan parameter precision unit waktu kosong tidak dihitung terhadap ketepatan nilai yang dikembalikan. Jika perilaku ini tidak diinginkan untuk Anda, Anda dapat menggunakan Metode TimeSpan.Humanize yang kelebihan beban. MEMANTIFKAN dengan parameter countEmptyUnits . Unit waktu kosong terkemuka tidak pernah dihitung. Berikut adalah contoh yang menunjukkan perbedaan menghitung unit kosong:
TimeSpan . FromMilliseconds ( 3603001 ) . Humanize ( 3 ) => "1 hour, 3 seconds, 1 millisecond"
TimeSpan . FromMilliseconds ( 3603001 ) . Humanize ( 3 , countEmptyUnits : true ) => "1 hour, 3 seconds"Banyak lokalisasi tersedia untuk metode ini:
// in de-DE culture
TimeSpan . FromDays ( 1 ) . Humanize ( ) => "Ein Tag"
TimeSpan . FromDays ( 2 ) . Humanize ( ) => "2 Tage"
// in sk-SK culture
TimeSpan . FromMilliseconds ( 1 ) . Humanize ( ) => "1 milisekunda"
TimeSpan . FromMilliseconds ( 2 ) . Humanize ( ) => "2 milisekundy"
TimeSpan . FromMilliseconds ( 5 ) . Humanize ( ) => "5 milisekúnd"Budaya untuk digunakan dapat ditentukan secara eksplisit. Jika tidak, budaya UI utas saat ini digunakan. Contoh:
TimeSpan . FromDays ( 1 ) . Humanize ( culture : "ru-RU" ) => "один день"Selain itu, unit waktu minimum dapat ditentukan untuk menghindari digulung ke unit yang lebih kecil. Misalnya:
TimeSpan . FromMilliseconds ( 122500 ) . Humanize ( minUnit : TimeUnit . Second ) => "2 minutes, 2 seconds" // instead of 2 minutes, 2 seconds, 500 milliseconds
TimeSpan . FromHours ( 25 ) . Humanize ( minUnit : TimeUnit . Day ) => "1 Day" //instead of 1 Day, 1 HourSelain itu, unit waktu maksimum dapat ditentukan untuk menghindari digulung ke unit terbesar berikutnya. Misalnya:
TimeSpan . FromDays ( 7 ) . Humanize ( maxUnit : TimeUnit . Day ) => "7 days" // instead of 1 week
TimeSpan . FromMilliseconds ( 2000 ) . Humanize ( maxUnit : TimeUnit . Millisecond ) => "2000 milliseconds" // instead of 2 seconds MaxUnit default adalah TimeUnit.Week karena memberikan hasil yang tepat. Anda dapat meningkatkan nilai ini menjadi TimeUnit.Month atau TimeUnit.Year yang akan memberi Anda perkiraan berdasarkan 365.2425 hari setahun dan 30.436875 hari sebulan. Oleh karena itu bulan -bulan bergantian antara 30 dan 31 hari panjang dan setiap tahun keempat adalah 366 hari.
TimeSpan . FromDays ( 486 ) . Humanize ( maxUnit : TimeUnit . Year , precision : 7 ) => "1 year, 3 months, 29 days" // One day further is 1 year, 4 month
TimeSpan . FromDays ( 517 ) . Humanize ( maxUnit : TimeUnit . Year , precision : 7 ) => "1 year, 4 months, 30 days" // This month has 30 days and one day further is 1 year, 5 months Ketika ada beberapa unit waktu, mereka digabungkan menggunakan string ", " :
TimeSpan . FromMilliseconds ( 1299630020 ) . Humanize ( 3 ) => "2 weeks, 1 day, 1 hour" Ketika TimeSpan adalah nol, perilaku default akan mengembalikan "0" ditambah apa pun unit waktu minimum. Namun, jika Anda menetapkan true to toWords saat memanggil Humanize , maka metode ini mengembalikan "tidak ada waktu". Misalnya:
TimeSpan . Zero . Humanize ( 1 ) => "0 milliseconds"
TimeSpan . Zero . Humanize ( 1 , toWords : true ) => "no time"
TimeSpan . Zero . Humanize ( 1 , minUnit : Humanizer . Localisation . TimeUnit . Second ) => "0 seconds" Menggunakan parameter collectionSeparator , Anda dapat menentukan string pemisah Anda sendiri:
TimeSpan . FromMilliseconds ( 1299630020 ) . Humanize ( 3 , collectionSeparator : " - " ) => "2 weeks - 1 day - 1 hour" Dimungkinkan juga untuk menggunakan formatter koleksi budaya saat ini untuk menggabungkan unit waktu. Untuk melakukannya, tentukan null sebagai parameter collectionSeparator :
// in en-US culture
TimeSpan . FromMilliseconds ( 1299630020 ) . Humanize ( 3 , collectionSeparator : null ) => "2 weeks, 1 day, and 1 hour"
// in de-DE culture
TimeSpan . FromMilliseconds ( 1299630020 ) . Humanize ( 3 , collectionSeparator : null ) => "2 Wochen, Ein Tag und Eine Stunde" Jika kata -kata lebih disukai daripada angka, toWords: true dapat diatur untuk mengonversi angka -angka dalam rentang waktu yang dimanusiakan menjadi kata -kata:
TimeSpan . FromMilliseconds ( 1299630020 ) . Humanize ( 3 , toWords : true ) => "two weeks, one day, one hour" Dengan menelepon ToAge , TimeSpan juga dapat dinyatakan sebagai usia. Untuk budaya yang tidak mendefinisikan ekspresi usia, hasilnya akan sama dengan menyebut Humanize (tetapi dengan maxUnit default sama dengan TimeUnit.Year ) .
// in en-US culture
TimeSpan . FromDays ( 750 ) . ToAge ( ) => "2 years old"
// in fr culture
TimeSpan . FromDays ( 750 ) . ToAge ( ) => "2 ans" Anda dapat menyebut Humanize pada semua IEnumerable untuk mendapatkan string yang diformat dengan baik yang mewakili objek dalam koleksi. Secara default ToString() akan dipanggil pada setiap item untuk mendapatkan representasi tetapi fungsi pemformatan dapat diteruskan untuk Humanize . Selain itu, pemisah default disediakan ("dan" dalam bahasa Inggris), tetapi pemisah yang berbeda dapat diteruskan ke dalam Humanize .
Misalnya:
class SomeClass
{
public string SomeString ;
public int SomeInt ;
public override string ToString ( )
{
return "Specific String" ;
}
}
string FormatSomeClass ( SomeClass sc )
{
return string . Format ( "SomeObject #{0} - {1}" , sc . SomeInt , sc . SomeString ) ;
}
var collection = new List < SomeClass >
{
new SomeClass { SomeInt = 1 , SomeString = "One" } ,
new SomeClass { SomeInt = 2 , SomeString = "Two" } ,
new SomeClass { SomeInt = 3 , SomeString = "Three" }
} ;
collection . Humanize ( ) // "Specific String, Specific String, and Specific String"
collection . Humanize ( "or" ) // "Specific String, Specific String, or Specific String"
collection . Humanize ( FormatSomeClass ) // "SomeObject #1 - One, SomeObject #2 - Two, and SomeObject #3 - Three"
collection . Humanize ( sc => sc . SomeInt . Ordinalize ( ) , "or" ) // "1st, 2nd, or 3rd"Barang -barang dipangkas dan kosong (nullorwhitespace) barang dilewati. Ini menghasilkan tanda baca koma bersih. (Jika ada fungsi formatter khusus, ini hanya berlaku untuk output formatter.)
Anda dapat memberikan formatter koleksi Anda sendiri dengan mengimplementasikan ICollectionFormatter dan mendaftarkannya dengan Configurator.CollectionFormatters .
Ada juga beberapa metode inflektor:
Pluralize Pluralizes Input yang Disediakan sambil mempertimbangkan kata -kata yang tidak teratur dan tak terhitung:
"Man" . Pluralize ( ) => "Men "
" string" . Pluralize ( ) => "strings" Biasanya Anda akan memanggil Pluralize pada kata tunggal tetapi jika Anda tidak yakin tentang singularitas kata Anda dapat menyebut metode tersebut dengan argumen inputIsKnownToBeSingular opsional:
"Men" . Pluralize ( inputIsKnownToBeSingular : false ) => "Men "
" Man" . Pluralize ( inputIsKnownToBeSingular : false ) => "Men"
"string" . Pluralize ( inputIsKnownToBeSingular : false ) => "strings" Kelebihan Pluralize dengan argumen plurality sudah usang dan dihapus dalam versi 2.0.
Singularize Singularize Input yang disediakan sambil mempertimbangkan kata -kata yang tidak teratur dan tak terhitung:
"Men" . Singularize ( ) => "Man "
" strings" . Singularize ( ) => "string" Biasanya Anda akan memanggil Singularize pada kata jamak tetapi jika Anda tidak yakin tentang pluralitas kata Anda dapat menyebut metode tersebut dengan argumen inputIsKnownToBePlural opsional:
"Men" . Singularize ( inputIsKnownToBePlural : false ) => "Man "
" Man" . Singularize ( inputIsKnownToBePlural : false ) => "Man"
"strings" . Singularize ( inputIsKnownToBePlural : false ) => "string" Kelebihan Singularize dengan argumen plurality sudah usang dan dihapus dalam versi 2.0.
Kadang -kadang, Anda mungkin perlu menambahkan aturan dari kosakata singularisasi/pluralisasi (contoh di bawah ini sudah ada di DefaultVocabulary yang digunakan oleh Inflector ):
// Adds a word to the vocabulary which cannot easily be pluralized/singularized by RegEx.
// Will match both "salesperson" and "person".
Vocabularies . Default . AddIrregular ( "person" , "people" ) ;
// To only match "person" and not "salesperson" you would pass false for the 'matchEnding' parameter.
Vocabularies . Default . AddIrregular ( "person" , "people" , matchEnding : false ) ;
// Adds an uncountable word to the vocabulary. Will be ignored when plurality is changed:
Vocabularies . Default . AddUncountable ( "fish" ) ;
// Adds a rule to the vocabulary that does not follow trivial rules for pluralization:
Vocabularies . Default . AddPlural ( "bus" , "buses" ) ;
// Adds a rule to the vocabulary that does not follow trivial rules for singularization
// (will match both "vertices" -> "vertex" and "indices" -> "index"):
Vocabularies . Default . AddSingular ( "(vert|ind)ices$" , "$1ex" ) ; Sering kali Anda ingin memanggil Singularize dan Pluralize untuk mengawali kata dengan nomor; misalnya "2 permintaan", "3 pria". ToQuantity awalan kata yang disediakan dengan nomor dan karenanya membentuk atau menyampaikan kata:
"case" . ToQuantity ( 0 ) => "0 cases"
"case" . ToQuantity ( 1 ) => "1 case"
"case" . ToQuantity ( 5 ) => "5 cases"
"man" . ToQuantity ( 0 ) => "0 men"
"man" . ToQuantity ( 1 ) => "1 man"
"man" . ToQuantity ( 2 ) => "2 men" ToQuantity dapat mengetahui apakah kata inputnya tunggal atau jamak dan akan menyepulasikan atau menjalin bahasa yang diperlukan:
"men" . ToQuantity ( 2 ) => "2 men"
"process" . ToQuantity ( 2 ) => "2 processes"
"process" . ToQuantity ( 1 ) => "1 process"
"processes" . ToQuantity ( 2 ) => "2 processes"
"processes" . ToQuantity ( 1 ) => "1 process" Anda juga dapat lulus argumen kedua, ShowQuantityAs , untuk ToQuantity untuk menentukan bagaimana Anda ingin kuantitas yang disediakan dikeluarkan. Nilai standarnya adalah ShowQuantityAs.Numeric yang merupakan apa yang kita lihat di atas. Dua nilai lainnya adalah ShowQuantityAs.Words dan ShowQuantityAs.None .
"case" . ToQuantity ( 5 , ShowQuantityAs . Words ) => "five cases "
" case" . ToQuantity ( 5 , ShowQuantityAs . None ) => "cases"Ada juga kelebihan beban yang memungkinkan Anda untuk memformat nomor tersebut. Anda dapat lulus dalam format dan budaya yang akan digunakan.
"dollar" . ToQuantity ( 2 , "C0" , new CultureInfo ( "en-US" ) ) => "$2 dollars"
"dollar" . ToQuantity ( 2 , "C2" , new CultureInfo ( "en-US" ) ) => "$2.00 dollars"
"cases" . ToQuantity ( 12000 , "N0" ) => "12,000 cases" Ordinalize mengubah angka menjadi string ordinal yang digunakan untuk menunjukkan posisi dalam urutan yang dipesan seperti 1, 2, 3, 4:
1 . Ordinalize ( ) => "1st"
5 . Ordinalize ( ) => "5th" Anda juga dapat memanggil Ordinalize pada string numerik dan mencapai hasil yang sama: "21".Ordinalize() => "21st"
Ordinalize juga mendukung gender tata bahasa untuk kedua bentuk. Anda dapat meneruskan argumen untuk Ordinalize GrammaticalGender.Feminine menentukan jenis kelamin yang harus dikeluarkan. Nilai -nilai yang GrammaticalGender.Neuter adalah GrammaticalGender.Masculine .
// for Brazilian Portuguese locale
1 . Ordinalize ( GrammaticalGender . Masculine ) => "1º"
1 . Ordinalize ( GrammaticalGender . Feminine ) => "1ª"
1 . Ordinalize ( GrammaticalGender . Neuter ) => "1º"
"2" . Ordinalize ( GrammaticalGender . Masculine ) => "2º"
"2" . Ordinalize ( GrammaticalGender . Feminine ) => "2ª"
"2" . Ordinalize ( GrammaticalGender . Neuter ) => "2º"Jelas ini hanya berlaku untuk beberapa budaya. Bagi orang lain yang melewati jenis kelamin atau tidak lewat sama sekali tidak membuat perbedaan dalam hasilnya.
Selain itu, Ordinalize mendukung variasi beberapa budaya berlaku tergantung pada posisi angka yang diatur dalam suatu kalimat. Gunakan argumen wordForm untuk mendapatkan satu hasil atau yang lain. Nilai yang mungkin adalah WordForm.Abbreviation dan WordForm.Normal . Anda dapat menggabungkan argumen wordForm dengan gender tetapi meneruskan argumen ini ketika tidak berlaku tidak akan membuat perbedaan dalam hasilnya.
// Spanish locale
1 . Ordinalize ( WordForm . Abbreviation ) => "1.er" // As in "Vivo en el 1.er piso"
1 . Ordinalize ( WordForm . Normal ) => "1.º" // As in "He llegado el 1º"
"3" . Ordinalize ( GrammaticalGender . Feminine , WordForm . Abbreviation ) => "3.ª"
"3" . Ordinalize ( GrammaticalGender . Feminine , WordForm . Normal ) => "3.ª"
"3" . Ordinalize ( GrammaticalGender . Masculine , WordForm . Abbreviation ) => "3.er"
"3" . Ordinalize ( GrammaticalGender . Masculine , WordForm . Normal ) => "3.º" Titleize mengubah kata -kata input ke casing judul; setara dengan "some title".Humanize(LetterCasing.Title)
Pascalize mengubah kata -kata input menjadi bagian atas, juga menghapus garis bawah dan ruang:
"some_title for something" . Pascalize ( ) => "SomeTitleForSomething" Camelize berperilaku identik untuk Pascalize , kecuali bahwa karakter pertama adalah huruf kecil:
"some_title for something" . Camelize ( ) => "someTitleForSomething" Underscore memisahkan kata -kata input dengan garis bawah:
"SomeTitle" . Underscore ( ) => "some_title" Dasherize dan Hyphenate menggantikan garis bawah dengan tanda hubung di string:
"some_title" . Dasherize ( ) => "some-title"
"some_title" . Hyphenate ( ) => "some-title" Kebaberize memisahkan kata -kata input dengan tanda hubung dan semua kata dikonversi menjadi huruf kecil
"SomeText" . Kebaberize ( ) => "some-text" Humanizer menyediakan API yang fasih untuk menangani DateTime dan TimeSpan sebagai berikut:
Metode TimeSpan :
2 . Milliseconds ( ) => TimeSpan . FromMilliseconds ( 2 )
2 . Seconds ( ) => TimeSpan . FromSeconds ( 2 )
2 . Minutes ( ) => TimeSpan . FromMinutes ( 2 )
2 . Hours ( ) => TimeSpan . FromHours ( 2 )
2 . Days ( ) => TimeSpan . FromDays ( 2 )
2 . Weeks ( ) => TimeSpan . FromDays ( 14 )Tidak ada API yang fasih untuk bulan atau tahun karena sebulan dapat memiliki antara 28 hingga 31 hari dan setahun bisa 365 atau 366 hari.
Anda dapat menggunakan metode ini untuk, misalnya, mengganti
DateTime . Now . AddDays ( 2 ) . AddHours ( 3 ) . AddMinutes ( - 5 )dengan
DateTime . Now + 2 . Days ( ) + 3 . Hours ( ) - 5 . Minutes ( ) Ada juga tiga kategori metode fasih untuk menangani DateTime :
In . TheYear ( 2010 ) // Returns the first of January of 2010
In . January // Returns 1st of January of the current year
In . FebruaryOf ( 2009 ) // Returns 1st of February of 2009
In . One . Second // DateTime.UtcNow.AddSeconds(1);
In . Two . SecondsFrom ( DateTime dateTime )
In . Three . Minutes // With corresponding From method
In . Three . Hours // With corresponding From method
In . Three . Days // With corresponding From method
In . Three . Weeks // With corresponding From method
In . Three . Months // With corresponding From method
In . Three . Years // With corresponding From method
On . January . The4th // Returns 4th of January of the current year
On . February . The ( 12 ) // Returns 12th of Feb of the current yeardan beberapa metode ekstensi:
var someDateTime = new DateTime ( 2011 , 2 , 10 , 5 , 25 , 45 , 125 ) ;
// Returns new DateTime(2008, 2, 10, 5, 25, 45, 125) changing the year to 2008
someDateTime . In ( 2008 )
// Returns new DateTime(2011, 2, 10, 2, 25, 45, 125) changing the hour to 2:25:45.125
someDateTime . At ( 2 )
// Returns new DateTime(2011, 2, 10, 2, 20, 15, 125) changing the time to 2:20:15.125
someDateTime . At ( 2 , 20 , 15 )
// Returns new DateTime(2011, 2, 10, 12, 0, 0) changing the time to 12:00:00.000
someDateTime . AtNoon ( )
// Returns new DateTime(2011, 2, 10, 0, 0, 0) changing the time to 00:00:00.000
someDateTime . AtMidnight ( ) Jelas Anda juga bisa rantai metode; misalnya On.November.The13th.In(2010).AtNoon + 5.Minutes()
Humanizer memberikan API yang lancar yang menghasilkan angka (biasanya besar) dengan cara yang lebih jelas:
1.25 . Billions ( ) => 1250000000
3 . Hundreds ( ) . Thousands ( ) => 300000 Humanizer dapat mengubah angka menjadi kata -kata menggunakan ekstensi ToWords :
1 . ToWords ( ) => "one"
10 . ToWords ( ) => "ten"
11 . ToWords ( ) => "eleven"
122 . ToWords ( ) => "one hundred and twenty-two"
3501 . ToWords ( ) => "three thousand five hundred and one" Anda juga dapat mengesahkan argumen kedua, GrammaticalGender , ToWords menentukan jenis GrammaticalGender.Feminine yang harus dikeluarkan. Nilai -nilai yang mungkin adalah GrammaticalGender.Masculine GrammaticalGender.Neuter
// for Russian locale
1 . ToWords ( GrammaticalGender . Masculine ) => "один"
1 . ToWords ( GrammaticalGender . Feminine ) => "одна"
1 . ToWords ( GrammaticalGender . Neuter ) => "одно" // for Arabic locale
1 . ToWords ( GrammaticalGender . Masculine ) => "واحد"
1 . ToWords ( GrammaticalGender . Feminine ) => "واحدة"
1 . ToWords ( GrammaticalGender . Neuter ) => "واحد"
( - 1 ) . ToWords ( ) => "ناقص واحد"Jelas ini hanya berlaku untuk beberapa budaya. Bagi orang lain yang melewati jenis kelamin tidak membuat perbedaan dalam hasilnya.
Juga, budaya untuk digunakan dapat ditentukan secara eksplisit. Jika tidak, budaya UI utas saat ini digunakan. Inilah contohnya:
11 . ToWords ( new CultureInfo ( "en" ) ) => "eleven"
1 . ToWords ( GrammaticalGender . Masculine , new CultureInfo ( "ru" ) ) => "один"Kelebihan metode lain memungkinkan Anda untuk melewati bool untuk menghapus "dan" yang dapat ditambahkan sebelum angka terakhir:
3501 . ToWords ( false ) => "three thousand five hundred one"
102 . ToWords ( false ) => "one hundred two"Metode ini dapat berguna untuk menulis cek misalnya.
Selain itu, ToWords mendukung variasi beberapa budaya berlaku tergantung pada posisi nomor dalam kalimat. Gunakan argumen wordForm untuk mendapatkan satu hasil atau yang lain. Nilai yang mungkin adalah WordForm.Abbreviation dan WordForm.Normal . Argumen ini dapat dikombinasikan dengan sisa argumen yang disajikan di atas. Melewati argumen wordForm di saat tidak berlaku tidak akan membuat perbedaan dalam hasilnya.
// Spanish locale
21501 . ToWords ( WordForm . Abbreviation , GrammaticalGender . Masculine ) => "veintiún mil quinientos un"
21501 . ToWords ( WordForm . Normal , GrammaticalGender . Masculine ) => "veintiún mil quinientos uno"
21501 . ToWords ( WordForm . Abbreviation , GrammaticalGender . Feminine ) => "veintiuna mil quinientas una"
// English US locale
21501 . ToWords ( WordForm . Abbreviation , GrammaticalGender . Masculine , new CultureInfo ( "en-US" ) ) => "twenty-one thousand five hundred and one" Ini semacam mencampur ToWords dengan Ordinalize . Anda dapat menghubungi ToOrdinalWords pada nomor untuk mendapatkan representasi ordinal dari nomor dalam kata -kata! Misalnya:
0 . ToOrdinalWords ( ) => "zeroth"
1 . ToOrdinalWords ( ) => "first"
2 . ToOrdinalWords ( ) => "second"
8 . ToOrdinalWords ( ) => "eighth"
10 . ToOrdinalWords ( ) => "tenth"
11 . ToOrdinalWords ( ) => "eleventh"
12 . ToOrdinalWords ( ) => "twelfth"
20 . ToOrdinalWords ( ) => "twentieth"
21 . ToOrdinalWords ( ) => "twenty first"
121 . ToOrdinalWords ( ) => "hundred and twenty first" ToOrdinalWords juga mendukung gender tata bahasa. Anda dapat meneruskan argumen kedua ke ToOrdinalWords untuk menentukan jenis kelamin output. Nilai -nilai GrammaticalGender.Feminine mungkin adalah GrammaticalGender.Masculine GrammaticalGender.Neuter
// for Brazilian Portuguese locale
1 . ToOrdinalWords ( GrammaticalGender . Masculine ) => "primeiro"
1 . ToOrdinalWords ( GrammaticalGender . Feminine ) => "primeira"
1 . ToOrdinalWords ( GrammaticalGender . Neuter ) => "primeiro"
2 . ToOrdinalWords ( GrammaticalGender . Masculine ) => "segundo"
2 . ToOrdinalWords ( GrammaticalGender . Feminine ) => "segunda"
2 . ToOrdinalWords ( GrammaticalGender . Neuter ) => "segundo" // for Arabic locale
1 . ToOrdinalWords ( GrammaticalGender . Masculine ) => "الأول"
1 . ToOrdinalWords ( GrammaticalGender . Feminine ) => "الأولى"
1 . ToOrdinalWords ( GrammaticalGender . Neuter ) => "الأول"
2 . ToOrdinalWords ( GrammaticalGender . Masculine ) => "الثاني"
2 . ToOrdinalWords ( GrammaticalGender . Feminine ) => "الثانية"
2 . ToOrdinalWords ( GrammaticalGender . Neuter ) => "الثاني"Jelas ini hanya berlaku untuk beberapa budaya. Bagi orang lain yang melewati jenis kelamin tidak membuat perbedaan dalam hasilnya.
Juga, budaya untuk digunakan dapat ditentukan secara eksplisit. Jika tidak, budaya UI utas saat ini digunakan. Inilah contohnya:
10 . ToOrdinalWords ( new CultureInfo ( "en-US" ) ) => "tenth"
1 . ToOrdinalWords ( GrammaticalGender . Masculine , new CulureInfo ( "pt-BR" ) ) => "primeiro" ToOrdinalWords juga mendukung variasi yang diterapkan beberapa budaya tergantung pada posisi nomor yang diatur dalam suatu kalimat. Gunakan argumen wordForm untuk mendapatkan satu hasil atau yang lain. Nilai yang mungkin adalah WordForm.Abbreviation dan WordForm.Normal . Gabungkan argumen ini dengan sisa argumen yang disajikan di atas. Melewati argumen wordForm di saat tidak berlaku tidak akan membuat perbedaan dalam hasilnya.
// Spanish locale
43 . ToOrdinalWords ( WordForm . Normal , GrammaticalGender . Masculine ) => "cuadragésimo tercero"
43 . ToOrdinalWords ( WordForm . Abbreviation , GrammaticalGender . Masculine ) => "cuadragésimo tercer"
43 . ToOrdinalWords ( WordForm . Abbreviation , GrammaticalGender . Feminine ) => "cuadragésima tercera"
// English locale
43 . ToOrdinalWords ( GrammaticalGender . Masculine , WordForm . Abbreviation , new CultureInfo ( "en" ) ) => "forty-third"Ini semacam perpanjangan ordinalisasi
// for English UK locale
new DateTime ( 2015 , 1 , 1 ) . ToOrdinalWords ( ) => "1st January 2015"
new DateTime ( 2015 , 2 , 12 ) . ToOrdinalWords ( ) => "12th February 2015"
new DateTime ( 2015 , 3 , 22 ) . ToOrdinalWords ( ) => "22nd March 2015"
// for English US locale
new DateTime ( 2015 , 1 , 1 ) . ToOrdinalWords ( ) => "January 1st, 2015"
new DateTime ( 2015 , 2 , 12 ) . ToOrdinalWords ( ) => "February 12th, 2015"
new DateTime ( 2015 , 3 , 22 ) . ToOrdinalWords ( ) => "March 22nd, 2015" ToOrdinalWords juga mendukung kasus tata bahasa. Anda dapat meneruskan argumen kedua ke ToOrdinalWords untuk menentukan kasus output. Nilai -nilai yang mungkin adalah GrammaticalCase.Nominative , GrammaticalCase.Genitive , GrammaticalCase.Dative , GrammaticalCase.Accusative , GrammaticalCase.Instrumental dan GrammaticalGender.Prepositional :
Jelas ini hanya berlaku untuk beberapa budaya. Untuk orang lain yang melewati kasus tidak membuat perbedaan dalam hasilnya.
Memperpanjang waktu untuk memungkinkan memanusiakannya ke notasi jam
// for English US locale
new TimeOnly ( 3 , 0 ) . ToClockNotation ( ) => "three o'clock"
new TimeOnly ( 12 , 0 ) . ToClockNotation ( ) => "noon"
new TimeOnly ( 14 , 30 ) . ToClockNotation ( ) => "half past two"
// for Brazilian Portuguese locale
new TimeOnly ( 3 , 0 ) . ToClockNotation ( ) => "três em ponto"
new TimeOnly ( 12 , 0 ) . ToClockNotation ( ) => "meio-dia"
new TimeOnly ( 14 , 30 ) . ToClockNotation ( ) => "duas e meia" Humanizer dapat mengubah angka menjadi angka Romawi menggunakan ekstensi ToRoman . Angka 1 hingga 10 dapat diekspresikan dalam angka Romawi sebagai berikut:
1 . ToRoman ( ) => "I"
2 . ToRoman ( ) => "II"
3 . ToRoman ( ) => "III"
4 . ToRoman ( ) => "IV"
5 . ToRoman ( ) => "V"
6 . ToRoman ( ) => "VI"
7 . ToRoman ( ) => "VII"
8 . ToRoman ( ) => "VIII"
9 . ToRoman ( ) => "IX"
10 . ToRoman ( ) => "X" Juga operasi terbalik menggunakan ekstensi FromRoman .
"I" . FromRoman ( ) => 1
"II" . FromRoman ( ) => 2
"III" . FromRoman ( ) => 3
"IV" . FromRoman ( ) => 4
"V" . FromRoman ( ) => 5Perhatikan bahwa hanya bilangan bulat yang lebih kecil dari 4000 yang dapat dikonversi menjadi angka Romawi.
Humanizer dapat mengubah angka menjadi angka metrik menggunakan ekstensi ToMetric . Angka 1, 1230 dan 0,1 dapat dinyatakan dalam angka metrik sebagai berikut:
1d . ToMetric ( ) => "1"
1230d . ToMetric ( ) => "1.23k"
0.1d . ToMetric ( ) => "100m" Juga operasi terbalik menggunakan ekstensi FromMetric .
"1" . FromMetric ( ) => 1
"1.23k" . FromMetric ( ) => 1230
"100m" . FromMetric ( ) => 0.1 Humanizer termasuk port dari perpustakaan Bytesize yang brilian. Cukup banyak perubahan dan penambahan dilakukan pada ByteSize untuk membuat interaksi dengan ByteSize lebih mudah dan lebih konsisten dengan Humanizer API. Berikut adalah beberapa contoh bagaimana Anda dapat mengonversi dari angka ke ukuran byte dan antara ukuran ukuran:
var fileSize = ( 10 ) . Kilobytes ( ) ;
fileSize . Bits => 81920
fileSize . Bytes => 10240
fileSize . Kilobytes => 10
fileSize . Megabytes => 0.009765625
fileSize . Gigabytes => 9.53674316e-6
fileSize . Terabytes => 9.31322575e-9Ada beberapa metode ekstensi yang memungkinkan Anda mengubah angka menjadi contoh bytesize:
3 . Bits ( ) ;
5 . Bytes ( ) ;
( 10.5 ) . Kilobytes ( ) ;
( 2.5 ) . Megabytes ( ) ;
( 10.2 ) . Gigabytes ( ) ;
( 4.7 ) . Terabytes ( ) ;Anda juga dapat menambah/mengurangi nilai menggunakan +/- operator dan menambahkan/mengurangi metode:
var total = ( 10 ) . Gigabytes ( ) + ( 512 ) . Megabytes ( ) - ( 2.5 ) . Gigabytes ( ) ;
total . Subtract ( ( 2500 ) . Kilobytes ( ) ) . Add ( ( 25 ) . Megabytes ( ) ) ; Objek ByteSize berisi dua properti yang mewakili simbol dan nilai awalan metrik terbesar:
var maxFileSize = ( 10 ) . Kilobytes ( ) ;
maxFileSize . LargestWholeNumberSymbol ; // "KB"
maxFileSize . LargestWholeNumberValue ; // 10 Jika Anda menginginkan representasi string, Anda dapat memanggil ToString atau Humanize secara bergantian pada contoh ByteSize :
7 . Bits ( ) . ToString ( ) ; // 7 b
8 . Bits ( ) . ToString ( ) ; // 1 B
( .5 ) . Kilobytes ( ) . Humanize ( ) ; // 512 B
( 1000 ) . Kilobytes ( ) . ToString ( ) ; // 1000 KB
( 1024 ) . Kilobytes ( ) . Humanize ( ) ; // 1 MB
( .5 ) . Gigabytes ( ) . Humanize ( ) ; // 512 MB
( 1024 ) . Gigabytes ( ) . ToString ( ) ; // 1 TB Anda juga dapat secara opsional memberikan format untuk representasi string yang diharapkan. Formatter dapat berisi simbol nilai yang akan ditampilkan: b , B , KB , MB , GB , TB . Formatter menggunakan metode built in double.ToString dengan #.## sebagai format default yang membulatkan angka ke dua tempat desimal:
var b = ( 10.505 ) . Kilobytes ( ) ;
// Default number format is #.##
b . ToString ( "KB" ) ; // 10.52 KB
b . Humanize ( "MB" ) ; // .01 MB
b . Humanize ( "b" ) ; // 86057 b
// Default symbol is the largest metric prefix value >= 1
b . ToString ( "#.#" ) ; // 10.5 KB
// All valid values of double.ToString(string format) are acceptable
b . ToString ( "0.0000" ) ; // 10.5050 KB
b . Humanize ( "000.00" ) ; // 010.51 KB
// You can include number format and symbols
b . ToString ( "#.#### MB" ) ; // .0103 MB
b . Humanize ( "0.00 GB" ) ; // 0 GB
b . Humanize ( "#.## B" ) ; // 10757.12 B Jika Anda menginginkan representasi string dengan kata -kata penuh, Anda dapat memanggil ToFullWords pada contoh ByteSize :
7 . Bits ( ) . ToFullWords ( ) ; // 7 bits
8 . Bits ( ) . ToFullWords ( ) ; // 1 byte
( .5 ) . Kilobytes ( ) . ToFullWords ( ) ; // 512 bytes
( 1000 ) . Kilobytes ( ) . ToFullWords ( ) ; // 1000 kilobytes
( 1024 ) . Kilobytes ( ) . ToFullWords ( ) ; // 1 megabyte
( .5 ) . Gigabytes ( ) . ToFullWords ( ) ; // 512 megabytes
( 1024 ) . Gigabytes ( ) . ToFullWords ( ) ; // 1 terabyte Tidak ada metode Dehumanize untuk mengubah representasi string kembali menjadi contoh ByteSize ; Tetapi Anda dapat menggunakan Parse dan TryParse pada ByteSize untuk melakukannya. Seperti metode TryParse lainnya, ByteSize.TryParse mengembalikan nilai boolean yang menunjukkan apakah parsing berhasil atau tidak. Jika nilainya diuraikan, output ke parameter out yang disediakan:
ByteSize output ;
ByteSize . TryParse ( "1.5mb" , out output ) ;
// Invalid
ByteSize . Parse ( "1.5 b" ) ; // Can't have partial bits
// Valid
ByteSize . Parse ( "5b" ) ;
ByteSize . Parse ( "1.55B" ) ;
ByteSize . Parse ( "1.55KB" ) ;
ByteSize . Parse ( "1.55 kB " ) ; // Spaces are trimmed
ByteSize . Parse ( "1.55 kb" ) ;
ByteSize . Parse ( "1.55 MB" ) ;
ByteSize . Parse ( "1.55 mB" ) ;
ByteSize . Parse ( "1.55 mb" ) ;
ByteSize . Parse ( "1.55 GB" ) ;
ByteSize . Parse ( "1.55 gB" ) ;
ByteSize . Parse ( "1.55 gb" ) ;
ByteSize . Parse ( "1.55 TB" ) ;
ByteSize . Parse ( "1.55 tB" ) ;
ByteSize . Parse ( "1.55 tb" ) ; Akhirnya, jika Anda perlu menghitung laju di mana jumlah byte telah ditransfer, Anda dapat menggunakan Per ByteSize . Metode Per menerima satu argumen - interval pengukuran untuk byte; Ini adalah jumlah waktu yang diperlukan untuk mentransfer byte.
Metode Per mengembalikan kelas ByteRate yang memiliki metode Humanize . Secara default, tarif diberikan dalam detik (misalnya, MB/S). Namun, jika diinginkan, suatu waktu dapat diteruskan untuk Humanize untuk interval alternatif. Interval yang valid adalah TimeUnit.Second , TimeUnit.Minute , dan TimeUnit.Hour . Contoh setiap interval dan contoh penggunaan laju byte di bawah ini.
var size = ByteSize . FromMegabytes ( 10 ) ;
var measurementInterval = TimeSpan . FromSeconds ( 1 ) ;
var text = size . Per ( measurementInterval ) . Humanize ( ) ;
// 10 MB/s
text = size . Per ( measurementInterval ) . Humanize ( TimeUnit . Minute ) ;
// 600 MB/min
text = size . Per ( measurementInterval ) . Humanize ( TimeUnit . Hour ) ;
// 35.15625 GB/hourAnda dapat menentukan format untuk bagian byte dari output yang dimanusiakan:
19854651984 . Bytes ( ) . Per ( 1 . Seconds ( ) ) . Humanize ( "#.##" ) ;
// 18.49 GB/s Humanizer termasuk metode untuk mengubah judul numerik ke kata -kata. Heading bisa menjadi double sedangkan hasilnya akan menjadi string. Anda dapat memilih apakah akan mengembalikan representasi penuh dari judul (mis. Utara, timur, selatan atau barat), representasi singkat (mis.
360 . ToHeading ( ) ;
// N
720 . ToHeading ( ) ;
// NUntuk mengambil versi lengkap dari heading, gunakan panggilan berikut:
180 . ToHeading ( HeadingStyle . Full ) ;
// south
360 . ToHeading ( HeadingStyle . Full ) ;
// northHarap dicatat bahwa representasi tekstual memiliki penyimpangan maksimum 11,25 °.
Metode di atas semua memiliki kelebihan beban yang dapat Anda berikan objek CultureInfo untuk menentukan hasil yang terlokalisasi untuk dikembalikan.
Untuk mengambil panah yang mewakili heading menggunakan metode berikut:
90 . ToHeadingArrow ( ) ;
// →
225 . ToHeadingArrow ( ) ;
// ↙Representasi panah dari heading memiliki penyimpangan maksimum 22,5 °.
Untuk mengambil heading berdasarkan representasi teks pendek (misalnya N, E, S, W), metode berikut dapat digunakan:
"S" . FromShortHeading ( ) ;
// 180
"SW" . FromShortHeading ( ) ;
// 225 Humanizer dapat mengubah bilangan bulat menjadi 'tuple' mereka menggunakan Tupleize . Misalnya:
1 . Tupleize ( ) ;
// single
3 . Tupleize ( ) ;
// triple
100 . Tupleize ( ) ;
// centupleAngka 1-10, 100 dan 1000 akan dikonversi menjadi 'Tuple' Tuple (yaitu "tunggal", "ganda" dll.). Angka lain "n" akan dikonversi menjadi "n-tuple".
Humanizer dapat menerjemahkan unit waktu ke simbol mereka:
TimeUnit . Day . ToSymbol ( ) ;
// d
TimeUnit . Week . ToSymbol ( ) ;
// week
TimeUnit . Year . ToSymbol ( ) ;
// y Ini hanya garis dasar dan Anda dapat menggunakan ini untuk menyederhanakan pekerjaan Anda sehari -hari. Misalnya, di ASP.NET MVC kami terus menampilkan atribut Display pada properti ViewModel sehingga HtmlHelper dapat menghasilkan label yang benar untuk kami; Tapi, seperti halnya enum, dalam sebagian besar kasus kita hanya membutuhkan ruang antara kata -kata dalam nama properti - jadi mengapa tidak menggunakan "string".Humanize untuk itu?!
Anda mungkin menemukan sampel ASP.NET MVC dalam kode yang melakukan itu (meskipun proyek dikeluarkan dari file solusi untuk membuat paket Nuget tersedia untuk .NET 3.5 juga).
Ini dicapai dengan menggunakan DataAnnotationsModelMetadataProvider KustomModelMetadataProvider yang saya sebut HumanizermetadataProvider. Cukup kecil untuk diulang di sini; Jadi di sini kita pergi:
using System ;
using System . Collections . Generic ;
using System . ComponentModel ;
using System . ComponentModel . DataAnnotations ;
using System . Linq ;
using System . Web . Mvc ;
using Humanizer ;
public class HumanizerMetadataProvider : DataAnnotationsModelMetadataProvider
{
protected override ModelMetadata CreateMetadata (
IEnumerable < Attribute > attributes ,
Type containerType ,
Func < object > modelAccessor ,
Type modelType ,
string propertyName )
{
var propertyAttributes = attributes . ToList ( ) ;
var modelMetadata = base . CreateMetadata ( propertyAttributes , containerType , modelAccessor , modelType , propertyName ) ;
if ( IsTransformRequired ( modelMetadata , propertyAttributes ) )
modelMetadata . DisplayName = modelMetadata . PropertyName . Humanize ( ) ;
return modelMetadata ;
}
private static bool IsTransformRequired ( ModelMetadata modelMetadata , IList < Attribute > propertyAttributes )
{
if ( string . IsNullOrEmpty ( modelMetadata . PropertyName ) )
return false ;
if ( propertyAttributes . OfType < DisplayNameAttribute > ( ) . Any ( ) )
return false ;
if ( propertyAttributes . OfType < DisplayAttribute > ( ) . Any ( ) )
return false ;
return true ;
}
} Kelas ini memanggil kelas dasar untuk mengekstrak metadata dan kemudian, jika diperlukan, memanusiakan nama properti. Ini sedang memeriksa apakah properti sudah memiliki DisplayName atau atribut Display di atasnya dalam hal ini penyedia metadata hanya akan menghormati atribut dan meninggalkan properti sendirian. Untuk properti lain itu akan memanusiakan nama properti. Itu saja.
Sekarang Anda perlu mendaftarkan penyedia metadata ini dengan ASP.NET MVC. Pastikan Anda menggunakan System.Web.Mvc.ModelMetadataProviders , dan bukan System.Web.ModelBinding.ModelMetadataProviders :
ModelMetadataProviders . Current = new HumanizerMetadataProvider ( ) ;... dan sekarang Anda bisa mengganti:
public class RegisterModel
{
[ Display ( Name = "User name" ) ]
public string UserName { get ; set ; }
[ Display ( Name = "Email address" ) ]
public string EmailAddress { get ; set ; }
[ Display ( Name = "Confirm password" ) ]
public string ConfirmPassword { get ; set ; }
}dengan:
public class RegisterModel
{
public string UserName { get ; set ; }
public string EmailAddress { get ; set ; }
public string ConfirmPassword { get ; set ; }
}... dan "Metadata Humanizer" akan mengurus sisanya.
Tidak perlu menyebutkan bahwa jika Anda ingin casing judul untuk label Anda, Anda dapat mengikat metode dengan Transform :
modelMetadata . DisplayName = modelMetadata . PropertyName . Humanize ( ) . Transform ( To . TitleCase ) ; Humanizer adalah perpustakaan kelas portabel. Saat ini ada masalah jika Anda mencoba menggunakan PCL dalam tampilan MVC karena tampilan MVC tidak berbagi sistem build yang sama dengan proyek reguler. Anda harus menentukan semua referensi dalam file web.config , termasuk yang ditambahkan sistem proyek secara otomatis.
Jika Anda menemukan kesalahan yang mengatakan bahwa Anda harus menambahkan referensi ke System.Globalization System.Runtime . Solusinya adalah menambahkan referensi kontrak ke web.config Anda seperti yang tercantum di sini. Perhatikan bahwa ini berlaku untuk PCL apa pun yang Anda gunakan dalam tampilan MVC, bukan hanya Humanizer.
Proyek Humanizer dibangun & diuji terus menerus oleh Azure DevOps (lebih detail di sini). Itu berlaku untuk menarik permintaan juga. Tak lama setelah Anda mengirimkan PR, Anda dapat memeriksa pemberitahuan status build dan pengujian pada PR Anda.
Status build saat ini di server CI adalah
Di bawah ini adalah daftar proyek sumber terbuka terkait:
Jika menggunakan Resharper, Anotasi untuk Humanizer tersedia di Paket Humanizer. Anotasi ini belum mencakup seluruh perpustakaan, tetapi permintaan tarik selalu diterima!.
PowerShell Humanizer adalah modul PowerShell yang membungkus Humanizer.
Humanizer.jvm adalah adaptasi dari kerangka humanizer untuk .NET yang dibuat untuk JVM dan ditulis dalam Kotlin. Humanizer.jvm memenuhi semua kebutuhan JVM Anda untuk memanipulasi dan menampilkan string, enum, tanggal, waktu, rentang waktu, angka dan jumlah.
Humanizer.node adalah port naskah dari kerangka humanizer.
Ikon dibuat oleh Tyrone Rieschiek