HumanizerHumanizerは、文字列、酵素、日付、時間、時間、数値、数量を操作および表示するためのすべての.NETニーズを満たしています。
HumanizerはNugetパッケージとしてインストールできます。
英語のみ: Humanizer.Core
すべての言語: Humanizer
次のフレームワークがサポートされています:Net4.8、Net6、Net7、およびNet8
注:NugetはNetStandard2もターゲットにします。これは、NetStandard2が必要なシナリオを有効にするためです。たとえば、Roslyn AnalyzersまたはMSBuildタスク。 NetStandard2を消費できる他のフレームワーク(上記以外)(ネット4.6.1からネット4.7.2まで)はサポートされていません。たとえば、Net4.6.1からNet4.7.2まではサポートされていません。
また、HumanizerシンボルはSourcelinkでソースインデックスが付けられており、パッケージに含まれているため、コードのデバッグ中にHumanizerコードをステップスルーできます。
インストールするNUGETパッケージに基づいてどのパッケージを選択します。デフォルトでは、Main Humanizer 2.0パッケージは、1.xで行うように、サポートされているすべての言語をインストールします。わからない場合は、メインのHumanizerパッケージを使用してください。
オプションは次のとおりです。
Humanizerパッケージを使用します。これにより、 Humanizer.Coreおよびすべての言語パッケージが引き込みます。Humanizer.Coreパッケージを使用します。英語のリソースのみが利用可能になりますHumanizer.Core.frを使用してください。必要な多くの言語パッケージをインストールして、複数の言語を含めることができます。これがどのように機能するかについての詳細な説明は、ここのコメントにあります。
Humanize String拡張機能を使用すると、それ以外の場合はコンピューター化された文字列をより読みやすい人間に優しい文字列に変換できます。この基盤は、クラス名、メソッド名、プロパティが人間の読み取り可能な文に変わっているBDDFYフレームワークに設定されました。
"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"上記の文字のみを含み、1つの単語のみで構成される文字列は、常に頭字語として扱われることに注意してください(その長さに関係なく)。任意の文字列が常に人間化されることを保証するには、変換を使用する必要があります(以下のTransform方法を参照):
// 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"また、目的の文字ケーシングを指定することもできます。
"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の
LetterCasingとそれを受け入れる方法は、v0.2 ERAからの遺産であり、将来的に非推奨になります。その代わりに、以下で説明するTransform方法を使用できます。
あなたがコンピューターに優しい人間に優しい弦に人間を人間化できるように、あなたは人間に優しい弦をコンピューターに優しいものに非人間化することができます:
"Pascal case input string is turned into sentence" . Dehumanize ( ) => "PascalCaseInputStringIsTurnedIntoSentence"LetterCasing受け入れるLetterCasing 、 ApplyCase 、およびHumanize過負荷に取って代わるTransform方法があります。 Transform Method Signatureは次のとおりです。
string Transform ( this string input , params IStringTransformer [ ] transformers )そして、文字ケーシングのためのIStringTransformerの箱から外れの実装があります。
"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 、 IStringTransformerを実装し、文字列を小文字に変える方法を知っているプライベートToLowerCaseクラスのインスタンスを返すToに合わせた公共の静的プロパティです。
Transform and IStringTransformer ApplyCaseおよびLetterCasingで使用する利点は、 LetterCasingが列挙でIStringTransformer 、 Transformワークにあるものを使用することに限定されていることです。
Truncateメソッドを使用して、 stringを切り捨てることができます。
"Long text to truncate" . Truncate ( 10 ) => "Long text…"デフォルトでは、 '…'文字は文字列を切り捨てるために使用されます。 '…'の代わりに"..."文字を使用する利点は、前者が単一のキャラクターしか服用しないため、切り捨て前にさらにテキストを表示できることです。必要に応じて、独自の切り捨て文字列を提供することもできます。
"Long text to truncate" . Truncate ( 10 , "---" ) => "Long te -- - "デフォルトの切り捨て戦略であるTruncator.FixedLengthは、入力文字列を切り捨てられた文字列の長さを含む特定の長さに切り捨てることです。さらに2つのトランカーター戦略があります。1つは、固定数の(アルファ数)文字と、固定数の単語用です。切り捨て時に特定のトランカーターを使用するには、前の例に示されている2つのTruncateメソッドにはすべて、切り捨てに使用するITruncatorインスタンスを指定できる過負荷があります。提供された3つの切り捨て器を使用する方法の例を次に示します。
"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---" ITruncatorインターフェイスを実装して、独自のトランカーターを作成することもできることに注意してください。
また、最初から文字列を切り捨てるか( TruncateFrom.Left )または終了( TruncateFrom.Right )を選択するかどうかを選択するオプションもあります。上記の例に示すように、デフォルトは権利です。以下の例は、文字列の先頭から切り捨てられる方法を示しています。
"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"通常、メンバーに直接ToStringを呼び出すと、ユーザーにとって理想的な出力が少なくなります。これに対する解決策は、通常、 DescriptionAttribute Data Annotationを使用して、実行時にそれを読んで、よりフレンドリーな出力を取得することです。それは素晴らしい解決策です。しかしString.Humanize()多くの場合、列挙メンバーの単語の間にスペースを置く必要があります。次のような列挙の場合:
public enum EnumUnderTest
{
[ Description ( "Custom description" ) ]
MemberWithDescriptionAttribute ,
MemberWithoutDescriptionAttribute ,
ALLCAPITALS
}あなたが得るでしょう:
// 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"カスタム説明のためのDescriptionAttributeに限定されません。 string Descriptionプロパティカウントを持つ列挙メンバーに適用される属性。これは、 DescriptionAttribute欠落しているプラットフォームを支援し、 DescriptionAttributeのサブクラスを許可するためです。
Attibuteのプロパティの名前を説明として使用することもできます。
Configurator.EnumDescriptionPropertyLocator = p => p.Name == "Info"
ローカライズされた説明を提供する必要がある場合は、代わりにDisplayAttributeデータアノテーションを使用できます。
public enum EnumUnderTest
{
[ Display ( Description = "EnumUnderTest_Member" , ResourceType = typeof ( Project . Resources ) ) ]
Member
}あなたが得るでしょう:
EnumUnderTest . Member . Humanize ( ) => "content" // from Project.Resources found under "EnumUnderTest_Member" resource keyうまくいけば、これが不必要な属性で散らばる酵素を避けるのに役立つでしょう!
元々は人間化されていた列挙に文字列を非人間化します! APIは次のように見えます:
public static TTargetEnum DehumanizeTo < TTargetEnum > ( this string input )使用法は次のとおりです。
"Member without description attribute" . DehumanizeTo < EnumUnderTest > ( ) => EnumUnderTest . MemberWithoutDescriptionAttributeそして、Humanize APIと同じように、 Description属性を称えます。人間化中に提供されたケーシングを提供する必要はありません。それはそれを理解しています。
コンパイル時に元の列挙が知られていない場合のための非ジェネリックな対応物もあります。
public static Enum DehumanizeTo ( this string input , Type targetEnum , NoMatch onNoMatch = NoMatch . ThrowsException )次のように使用できます。
"Member without description attribute" . DehumanizeTo ( typeof ( EnumUnderTest ) ) => EnumUnderTest . MemberWithoutDescriptionAttributeデフォルトでは、両方のメソッドがターゲット列挙に対する提供された入力と一致できない場合、 NoMatchFoundExceptionをスローします。非genericメソッドでは、2番目のオプションパラメーターをNoMatch.ReturnsNullに設定して、nullを返す方法を尋ねることもできます。
DateTimeまたはDateTimeOffsetのインスタンスをHumanize 、文字列を取り戻すことができます。
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は、ローカルとUTCの両方の日付と、オフセットの日付( DateTimeOffset )をサポートしています。また、入力日を比較する日付を提供することもできます。 nullの場合、現在の日付を比較ベースとして使用します。また、使用する文化は明示的に指定できます。そうでない場合、現在のスレッドの現在のUIカルチャーが使用されます。これが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 )この方法では、多くのローカリゼーションが利用できます。いくつかの例があります:
// 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 минут назад" DateTime.Humanizeには2つの戦略があります。上記のデフォルトの戦略と、精度に基づくものです。精密ベースの戦略を使用するには、それを構成する必要があります。
Configurator . DateTimeHumanizeStrategy = new PrecisionDateTimeHumanizeStrategy ( precision : .75 ) ;
Configurator . DateTimeOffsetHumanizeStrategy = new PrecisionDateTimeOffsetHumanizeStrategy ( precision : .75 ) ; // configure when humanizing DateTimeOffsetデフォルトの精度は.75に設定されていますが、希望する精度も渡すことができます。精度が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 Humanize喪失した変化であり、人間の友好的な日付が可逆的ではないため、日付の非人間化はありません
TimeSpanでHumanize呼び出して、人間に優しい表現を得ることができます。
TimeSpan . FromMilliseconds ( 1 ) . Humanize ( ) => "1 millisecond"
TimeSpan . FromMilliseconds ( 2 ) . Humanize ( ) => "2 milliseconds"
TimeSpan . FromDays ( 1 ) . Humanize ( ) => "1 day"
TimeSpan . FromDays ( 16 ) . Humanize ( ) => "2 weeks" TimeSpan.Humanizeにはオプションのprecisionパラメーターがあり、返された値の精度を指定できます。 precisionのデフォルト値は1です。つまり、 TimeSpan.FromDays(16).Humanize()で見たように、最大の時間単位のみが返されます。精度を指定する例をいくつか紹介します。
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"デフォルトでは、 precisionパラメーターを使用する場合は、空の時間単位が返された値の精度にカウントされません。この動作が望ましくない場合は、 countEmptyUnitsパラメーターを使用して過負荷のTimeSpan.Humanizeメソッドを使用できます。主要な空の時間ユニットはカウントされません。空のユニットをカウントすることの違いを示す例を以下に示します。
TimeSpan . FromMilliseconds ( 3603001 ) . Humanize ( 3 ) => "1 hour, 3 seconds, 1 millisecond"
TimeSpan . FromMilliseconds ( 3603001 ) . Humanize ( 3 , countEmptyUnits : true ) => "1 hour, 3 seconds"この方法では、多くのローカライズが利用可能です。
// 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"使用する文化は明示的に指定できます。そうでない場合、現在のスレッドの現在のUIカルチャーが使用されます。例:
TimeSpan . FromDays ( 1 ) . Humanize ( culture : "ru-RU" ) => "один день"さらに、より小さなユニットに転落しないように、最小時間単位を指定することができます。例えば:
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 Hourさらに、次の最大のユニットに転がることを避けるために、最大時間単位を指定することができます。例えば:
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は、正確な結果をもたらすため、 TimeUnit.Weekです。この値をTimeUnit.MonthまたはTimeUnit.Yearに増やすことができます。したがって、月の長さは30〜31日で、4年ごとに366日間です。
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複数の時間単位がある場合、それらは", " string:を使用して組み合わされます。
TimeSpan . FromMilliseconds ( 1299630020 ) . Humanize ( 3 ) => "2 weeks, 1 day, 1 hour" TimeSpanがゼロの場合、デフォルトの動作は「0」と最小時間単位が何であれ、返されます。ただし、 Humanize呼び出すときにtoWordsにtrue割り当てると、メソッドは「No Time」を返します。例えば:
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" collectionSeparatorパラメーターを使用して、独自のセパレーター文字列を指定できます。
TimeSpan . FromMilliseconds ( 1299630020 ) . Humanize ( 3 , collectionSeparator : " - " ) => "2 weeks - 1 day - 1 hour"また、現在の文化のコレクションフォーマッタを使用して、時間単位を組み合わせることもできます。そうするために、 null 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"単語が数字よりも優先される場合、 toWords: trueパラメーターを設定することができます。
TimeSpan . FromMilliseconds ( 1299630020 ) . Humanize ( 3 , toWords : true ) => "two weeks, one day, one hour" ToAgeを呼び出すことにより、 TimeSpan年齢として表現することもできます。年齢発現を定義しない文化の場合、結果はHumanize呼び出すことと同じです(ただし、デフォルトのmaxUnitがTimeUnit.Yearに等しい) 。
// in en-US culture
TimeSpan . FromDays ( 750 ) . ToAge ( ) => "2 years old"
// in fr culture
TimeSpan . FromDays ( 750 ) . ToAge ( ) => "2 ans"コレクション内のオブジェクトを表す適切にフォーマットされた文字列を取得するために、任意のIEnumerableでHumanizeを呼び出すことができます。デフォルトでは、各項目でToString()が呼び出されて表現を取得しますが、代わりにHumanizeにフォーマット関数を渡すことができます。さらに、デフォルトのセパレーターが提供されます( "および"英語)が、別のセパレーターがHumanizeに渡される場合があります。
例えば:
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"アイテムはトリミングされ、空白(nullorwhiteSpace)アイテムがスキップされます。これにより、クリーンなコンマ句読点が生じます。 (カスタムフォーマッタ関数がある場合、これはフォーマッタの出力にのみ適用されます。)
ICollectionFormatterを実装し、 Configurator.CollectionFormattersに登録することにより、独自のコレクションフォーマッタを提供できます。
いくつかの編集方法もあります。
Pluralize 、不規則で数えられない単語を考慮しながら、提供された入力を複数形成します。
"Man" . Pluralize ( ) => "Men "
" string" . Pluralize ( ) => "strings"通常、単語の単語でPluralize呼び出しますが、単語の特異性について確信が持てない場合は、オプションのinputIsKnownToBeSingular引数を使用してメソッドを呼び出すことができます。
"Men" . Pluralize ( inputIsKnownToBeSingular : false ) => "Men "
" Man" . Pluralize ( inputIsKnownToBeSingular : false ) => "Men"
"string" . Pluralize ( inputIsKnownToBeSingular : false ) => "strings" plurality引数によるPluralize過負荷は時代遅れであり、バージョン2.0で削除されました。
Singularize数え切れないほどの単語を考慮しながら、提供された入力を特異化します。
"Men" . Singularize ( ) => "Man "
" strings" . Singularize ( ) => "string"通常、複数の単語でSingularize呼び出しますが、単語の複数性について確信が持てない場合は、オプションのinputIsKnownToBePlural引数を使用してメソッドを呼び出すことができます。
"Men" . Singularize ( inputIsKnownToBePlural : false ) => "Man "
" Man" . Singularize ( inputIsKnownToBePlural : false ) => "Man"
"strings" . Singularize ( inputIsKnownToBePlural : false ) => "string" plurality議論によるSingularize過負荷は時代遅れであり、バージョン2.0で削除されました。
特異化/多元化語彙からルールを追加する必要がある場合がある場合があります(以下の例は、すでにInflectorで使用されるDefaultVocabularyにあります):
// 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" ) ; 多くの場合、 SingularizeとPluralizeを呼び出して、数字の単語に接頭辞を付けたいと考えています。例:「2リクエスト」、「3人の男性」。 ToQuantity 、提供された単語に数字を付け、それに応じて単語を複数形または単数形にします。
"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 、入力単語が特異なものであるか複数であるかどうかを把握でき、必要に応じて特異化または複数化されます。
"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"また、2番目の引数、 ShowQuantityAs ToQuantity渡して、提供された数量を出力する方法を指定することもできます。デフォルト値はShowQuantityAs.Numericです。これは上記で見たものです。他の2つの値は、 ShowQuantityAs.WordsとShowQuantityAs.Noneです。
"case" . ToQuantity ( 5 , ShowQuantityAs . Words ) => "five cases "
" case" . ToQuantity ( 5 , ShowQuantityAs . None ) => "cases"また、番号をフォーマットできるオーバーロードもあります。使用する形式と文化を渡すことができます。
"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 、数値を1番目、2番目、3番目、4番目などの順序付けられたシーケンスで位置を示すために使用される順序文字列に変換します。
1 . Ordinalize ( ) => "1st"
5 . Ordinalize ( ) => "5th"また、数値文字列でOrdinalize呼び出して、同じ結果を達成することもできます: "21".Ordinalize() => "21st"
Ordinalize 、両方の形式の文法性別もサポートしています。引数をOrdinalizeに渡して、どの性別を出力するかを指定できます。考えられる値はGrammaticalGender.Masculine 、 GrammaticalGender.Feminine 、 GrammaticalGender.Neuterです。
// 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º"明らかに、これはいくつかの文化にのみ当てはまります。性別を渡す他の人にとっては、まったく通過しない人にとっては、結果に違いはありません。
さらに、 Ordinalizeバリエーションをサポートします。文の序数の位置に応じて、一部の文化が適用されます。引数wordFormを使用して、何らかの結果を取得します。考えられる値は、 WordForm.AbbreviationとWordForm.Normalです。 wordForm引数を性別と組み合わせることができますが、該当しない場合にこの引数を渡すことで、結果に違いはありません。
// 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 、入力語をタイトルケーシングに変換します。 "some title".Humanize(LetterCasing.Title)
Pascalize 、入力単語をアッペルカメルケースに変換し、アンダースコアやスペースも削除します。
"some_title for something" . Pascalize ( ) => "SomeTitleForSomething" Camelize 、最初のキャラクターが小文字であることを除いて、 Pascalizeために同じように動作します。
"some_title for something" . Camelize ( ) => "someTitleForSomething" Underscore 、入力語をアンダースコアで分離します。
"SomeTitle" . Underscore ( ) => "some_title" 弦のダッシュには、 DasherizeとHyphenateがアンダースコアを置き換えます。
"some_title" . Dasherize ( ) => "some-title"
"some_title" . Hyphenate ( ) => "some-title" Kebaberize入力単語をハイフンで分離し、すべての単語は小文字に変換されます
"SomeText" . Kebaberize ( ) => "some-text"Humanizerは、次のようにDateTimeとTimeSpanに対処するためのFluent APIを提供します。
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 )月または年には1か月または1年には、28〜31日間の間で365日または366日になる可能性があるため、流apiはありません。
これらの方法を使用して、たとえば交換することができます
DateTime . Now . AddDays ( 2 ) . AddHours ( 3 ) . AddMinutes ( - 5 )と
DateTime . Now + 2 . Days ( ) + 3 . Hours ( ) - 5 . Minutes ( ) DateTimeに対処するための流fluentな方法の3つのカテゴリもあります。
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 yearおよびいくつかの拡張方法:
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 ( )明らかに、あなたもメソッドをチェーンすることができます。 Eg On.November.The13th.In(2010).AtNoon + 5.Minutes()
Humanizerは、より明確な方法で(通常は大きな)数字を生成する流fluentAPIを提供します。
1.25 . Billions ( ) => 1250000000
3 . Hundreds ( ) . Thousands ( ) => 300000Humanizerは、 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"また、2番目GrammaticalGender.Feminine引数、 GrammaticalGender GrammaticalGender.Masculine渡してGrammaticalGender.Neuterどの性別を出力するかを指定するToWordsもできます。
// 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 ( ) => "ناقص واحد"明らかに、これはいくつかの文化にのみ当てはまります。性別を渡す他の人にとっては、結果に違いはありません。
また、使用する文化は明示的に指定できます。そうでない場合、現在のスレッドの現在のUIカルチャーが使用されます。これが例です:
11 . ToWords ( new CultureInfo ( "en" ) ) => "eleven"
1 . ToWords ( GrammaticalGender . Masculine , new CultureInfo ( "ru" ) ) => "один"メソッドの別の過負荷を使用すると、ブールを渡して「と」を削除することができます。最後の番号の前に追加できます。
3501 . ToWords ( false ) => "three thousand five hundred one"
102 . ToWords ( false ) => "one hundred two"この方法は、たとえばチェックを書くのに役立ちます。
さらに、 ToWordsバリエーションをサポートしています。文の数の位置に応じて、一部の文化が適用されます。引数wordFormを使用して、何らかの結果を取得します。考えられる値は、 WordForm.AbbreviationとWordForm.Normalです。この議論は、上記の残りの議論と組み合わせることができます。適用されない場合にwordForm引数を渡すことで、結果に違いがありません。
// 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"これは、 ToWords Ordinalizeと混合するようなものです。数字でToOrdinalWordsを呼び出して、数字の順序表現を言葉で取得できます!例えば:
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 、文法的な性別もサポートしています。 ToOrdinalWordsに2番目の引数を渡して、出力の性別を指定できます。考えられる値はGrammaticalGender.Masculine 、 GrammaticalGender.Feminine 、 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 ) => "الثاني"明らかに、これはいくつかの文化にのみ当てはまります。性別を渡す他の人にとっては、結果に違いはありません。
また、使用する文化は明示的に指定できます。そうでない場合、現在のスレッドの現在のUIカルチャーが使用されます。これが例です:
10 . ToOrdinalWords ( new CultureInfo ( "en-US" ) ) => "tenth"
1 . ToOrdinalWords ( GrammaticalGender . Masculine , new CulureInfo ( "pt-BR" ) ) => "primeiro"また、 ToOrdinalWordsバリエーションをサポートしています。文の序数の位置に応じて、一部の文化が適用されます。引数wordFormを使用して、何らかの結果を取得します。考えられる値は、 WordForm.AbbreviationとWordForm.Normalです。この議論を上記の残りの議論と組み合わせます。適用されない場合にwordForm引数を渡すことで、結果に違いがありません。
// 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"これは、ordinalizeの一種の拡張です
// 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 、文法的なケースもサポートしています。 ToOrdinalWordsに2番目の引数を渡して、出力のケースを指定できます。考えられる値は、 GrammaticalCase.Nominative 、 GrammaticalCase.Genitive 、 GrammaticalCase.Dative 、 GrammaticalCase.Accusative 、 GrammaticalCase.Instrumental and GrammaticalGender.Prepositional :
明らかに、これはいくつかの文化にのみ当てはまります。ケースを渡す他の人にとっては、結果に違いはありません。
クロック表記にそれを人間化することを可能にするためにタイムソンリーを拡張します
// 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は、 ToRoman Extensionを使用して数字をローマ数字に変更できます。数字1〜10は、次のようにローマ数字で表現できます。
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"また、 FromRoman拡張を使用した逆操作。
"I" . FromRoman ( ) => 1
"II" . FromRoman ( ) => 2
"III" . FromRoman ( ) => 3
"IV" . FromRoman ( ) => 4
"V" . FromRoman ( ) => 54000未満の整数のみがローマ数字に変換できることに注意してください。
Humanizerは、 ToMetric拡張を使用して数値をメトリック数字に変更できます。次のように、数値1、1230、および0.1はメートル数字で表現できます。
1d . ToMetric ( ) => "1"
1230d . ToMetric ( ) => "1.23k"
0.1d . ToMetric ( ) => "100m"また、 FromMetric拡張機能を使用した逆操作。
"1" . FromMetric ( ) => 1
"1.23k" . FromMetric ( ) => 1230
"100m" . FromMetric ( ) => 0.1Humanizerには、Brillation Bytesizeライブラリのポートが含まれています。 ByteSizeでは、かなりの数の変更と追加が行われ、 ByteSizeとの相互作用がHumanizer APIとの相互作用をより簡単に一致させます。数字からバイトサイズ、およびサイズの大きさの間でどのように変換できるかの例をいくつか紹介します。
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-9数字をバイテスのインスタンスに変えることができるいくつかの拡張メソッドがあります。
3 . Bits ( ) ;
5 . Bytes ( ) ;
( 10.5 ) . Kilobytes ( ) ;
( 2.5 ) . Megabytes ( ) ;
( 10.2 ) . Gigabytes ( ) ;
( 4.7 ) . Terabytes ( ) ;また、+/-オペレーターを使用して値を追加/減算し、メソッドを追加/減算することもできます。
var total = ( 10 ) . Gigabytes ( ) + ( 512 ) . Megabytes ( ) - ( 2.5 ) . Gigabytes ( ) ;
total . Subtract ( ( 2500 ) . Kilobytes ( ) ) . Add ( ( 25 ) . Megabytes ( ) ) ; ByteSizeオブジェクトには、最大のメトリックプレフィックスシンボルと値を表す2つのプロパティが含まれています。
var maxFileSize = ( 10 ) . Kilobytes ( ) ;
maxFileSize . LargestWholeNumberSymbol ; // "KB"
maxFileSize . LargestWholeNumberValue ; // 10文字列の表現が必要な場合は、 ByteSizeインスタンスでToStringまたはHumanize互換性があります。
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また、オプションで、予想される文字列表現のフォーマットを提供することもできます。フォーマッタには、表示する値のシンボルを含めることができます: b 、 B 、 KB 、 MB 、 GB 、 TB 。 Formatterは、 #.##を備えた組み込みのdouble.ToStringメソッドを使用します。
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完全な単語のある文字列表現が必要な場合は、 ByteSizeインスタンスでToFullWordsを呼び出すことができます。
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文字列の表現をByteSizeインスタンスに戻すためのDehumanize方法はありません。ただし、それを行うためにByteSizeでParseとTryParse使用できます。他のTryParseメソッドと同様に、 ByteSize.TryParse 、解析が成功したかどうかを示すboolean値を返します。値が解析された場合、供給されるoutパラメーターに出力されます。
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" ) ;最後に、バイトの量が転送されている速度を計算する必要がある場合は、 ByteSizeの方Perを使用できます。 Perごとに1つの引数 - バイトの測定間隔。これは、バイトの転送にかかった時間です。
メソッドPer 、 HumanizeメソッドがあるByteRateクラスが返されます。デフォルトでは、レートは数秒(MB/sなど)で与えられます。ただし、必要に応じて、TimeUnitを渡されて、代替間隔のためにHumanizeことができます。有効な間隔は、 TimeUnit.Second 、 TimeUnit.Minute 、およびTimeUnit.Hourです。各間隔および例のバイトレートの使用例の例は以下にあります。
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/hour人間化された出力のバイト部分の形式を指定できます。
19854651984 . Bytes ( ) . Per ( 1 . Seconds ( ) ) . Humanize ( "#.##" ) ;
// 18.49 GB/sHumanizerには、数値見出しを単語に変更する方法が含まれています。見出しはdoubleにすることができますが、結果は文字列になります。見出し(北、東、南、西など)の完全な表現、短い表現(n、e、s、w)、またはユニコード矢印文字(例:↑、→、↓、←)を返すかどうかを選択できます。
360 . ToHeading ( ) ;
// N
720 . ToHeading ( ) ;
// N見出しのフルバージョンを取得するには、次の通話を使用してください。
180 . ToHeading ( HeadingStyle . Full ) ;
// south
360 . ToHeading ( HeadingStyle . Full ) ;
// northテキスト表現の最大偏差は11.25°であることに注意してください。
メソッドには、何よりも過負荷があり、局所的な結果を返すためにCultureInfoオブジェクトを提供できます。
見出しを表す矢印を取得するには、次の方法を使用します。
90 . ToHeadingArrow ( ) ;
// →
225 . ToHeadingArrow ( ) ;
// ↙見出しの矢印表現の最大偏差は22.5°です。
短いテキスト表現(n、e、s、w)に基づいて見出しを取得するために、次の方法を使用できます。
"S" . FromShortHeading ( ) ;
// 180
"SW" . FromShortHeading ( ) ;
// 225Humanizerは、 Tupleizeを使用して整数を「タプル」に変えることができます。例えば:
1 . Tupleize ( ) ;
// single
3 . Tupleize ( ) ;
// triple
100 . Tupleize ( ) ;
// centuple数字1〜10、100、1000は、「名前のある」タプル(つまり "シングル"、 "double"など)に変換されます。他の番号「n」は「n-tuple」に変換されます。
Humanizerは、時間単位をシンボルに変換できます。
TimeUnit . Day . ToSymbol ( ) ;
// d
TimeUnit . Week . ToSymbol ( ) ;
// week
TimeUnit . Year . ToSymbol ( ) ;
// y これは単なるベースラインであり、これを使用して日々の仕事を簡素化できます。たとえば、ASP.NET MVCでは、 HtmlHelper正しいラベルを生成できるように、viewmodelプロパティにDisplay属性を維持します。しかし、列挙のように、ほとんどの場合、私たちはプロパティ名の単語の間にスペースが必要です。そのため、 "string".Humanizeを使用してみませんか?
それを行うコードにASP.NET MVCサンプルを見つけることができます(ただし、プロジェクトはソリューションファイルから除外され、nugetパッケージを.NET 3.5でも利用できるようにします)。
これは、Humanizermetadataproviderと呼ばれるカスタムDataAnnotationsModelMetadataProviderを使用して達成されます。ここで繰り返すほど小さいです。だからここに行きます:
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 ;
}
}このクラスは、基本クラスを呼び出してメタデータを抽出し、必要に応じてプロパティ名を人間化します。プロパティが既にDisplayNameまたはDisplay属性を既に持っているかどうかを確認しています。他のプロパティの場合、プロパティ名を人間化します。それだけです。
次に、このメタデータプロバイダーをASP.NET MVCに登録する必要があります。 System.Web.Mvc.ModelMetadataProvidersではなく、 System.Web.ModelBinding.ModelMetadataProvidersを使用してください。
ModelMetadataProviders . Current = new HumanizerMetadataProvider ( ) ;...そして今、あなたは置き換えることができます:
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 ; }
}と:
public class RegisterModel
{
public string UserName { get ; set ; }
public string EmailAddress { get ; set ; }
public string ConfirmPassword { get ; set ; }
}...そして、「メタデータヒューマイライザー」が残りの世話をします。
ラベルにタイトルケーシングが必要な場合は、 Transform方法でメソッドをチェーンできることに言及する必要はありません。
modelMetadata . DisplayName = modelMetadata . PropertyName . Humanize ( ) . Transform ( To . TitleCase ) ; Humanizerはポータブルクラスライブラリです。 MVCビューは通常のプロジェクトと同じビルドシステムを共有していないため、MVCビューでPCLを使用しようとする場合、現在問題があります。プロジェクトシステムが通常自動的に追加するものを含む、 web.configファイルのすべての参照を指定する必要があります。
System.RuntimeまたはSystem.Globalizationいずれかに参照を追加する必要があるというエラーが発生した場合、これはあなたに適用されます。解決策は、ここにリストされているように、 web.configに契約参照を追加することです。これは、Humanizerだけでなく、MVCビューで使用するPCLに適用されることに注意してください。
Humanizerプロジェクトは、Azure Devopsによって継続的に構築およびテストされています(詳細はこちら)。それはリクエストをプルすることにも当てはまります。 PRを送信した直後、PRのビルドおよびテストステータス通知を確認できます。
CIサーバーの現在のビルドステータスはです
以下は、関連するオープンソースプロジェクトのリストです。
Resharperを使用している場合、Humanizerの注釈はHumanizer.Annotationsパッケージで利用でき、Resharper拡張マネージャーを介して取得できます。これらの注釈はまだライブラリ全体をカバーしていませんが、プルリクエストはいつでも大歓迎です!
Powershell Humanizerは、HumanizerをラップするPowerShellモジュールです。
Humanizer.jvmは、JVM向けに作成され、Kotlinで書かれている.NETのHumanizer Frameworkの適応です。 Humanizer.jvmは、文字列、列挙、日付、時間、数字、数量を操作および表示するために、JVMのすべてのニーズを満たしています。
Humanizer.Nodeは、Humanizerフレームワークのタイプスクリプトポートです。
Tyrone Rieschiekが作成したアイコン