{"record":{"id":"301042075660c9f0","repo":"Humanizr/Humanizer","slug":"the-formatter-for-culture-name-cultureinfo-c","errorCode":null,"errorMessage":"The formatter for '{culture?.Name ?? CultureInfo.CurrentCulture.Name}' does not support grammatical-case-aware durations.","messagePattern":"The formatter for '(.+?)' does not support grammatical-case-aware durations\\.","errorType":"exception","errorClass":"NotSupportedException","httpStatus":null,"severity":"error","filePath":"src/Humanizer/TimeSpanHumanizeExtensions.cs","lineNumber":916,"sourceCode":"                toSymbols,\n                grammaticalCase)\n            : null;\n\n    internal static string FormatTimePart(\n        IFormatter cultureFormatter,\n        TimeUnit timeUnit,\n        int amount,\n        CultureInfo? culture,\n        bool toWords,\n        bool toSymbols,\n        GrammaticalCase? grammaticalCase) =>\n        toSymbols\n            ? string.Concat(amount.ToString(culture ?? CultureInfo.CurrentCulture), cultureFormatter.TimeUnitHumanize(timeUnit))\n            : grammaticalCase is null\n                ? cultureFormatter.TimeSpanHumanize(timeUnit, amount, toWords)\n                : cultureFormatter is IGrammaticalCaseTimeSpanFormatter caseFormatter\n                    ? caseFormatter.TimeSpanHumanize(timeUnit, amount, grammaticalCase.Value)\n                    : throw new NotSupportedException(\n                        $\"The formatter for '{culture?.Name ?? CultureInfo.CurrentCulture.Name}' does not support grammatical-case-aware durations.\");\n\n    static string HumanizeSinglePart(\n        TimeSpan timeSpan,\n        CultureInfo? culture,\n        TimeUnit maxUnit,\n        TimeUnit minUnit,\n        bool toWords,\n        bool toSymbols,\n        GrammaticalCase? grammaticalCase)\n    {\n        var cultureFormatter = Configurator.GetFormatter(culture);\n        foreach (var timeUnit in TimeUnits)\n        {\n            var timePart = GetTimeUnitPart(\n                timeUnit,\n                timeSpan,\n                maxUnit,","sourceCodeStart":898,"sourceCodeEnd":934,"githubUrl":"https://github.com/Humanizr/Humanizer/blob/ffc2b77c0f30d2fb176875841424379319d0ae9b/src/Humanizer/TimeSpanHumanizeExtensions.cs#L898-L934","documentation":"Thrown by FormatTimePart when a grammatical case is requested for word-based output but the culture's IFormatter does not implement IGrammaticalCaseTimeSpanFormatter. Not all locale formatters support case inflection; this guard prevents silent fallback to the uninflected form.","triggerScenarios":"Calling HumanizeWithCase or a case-aware humanize with a culture whose formatter (e.g. English DefaultFormatter) does not implement IGrammaticalCaseTimeSpanFormatter. The formatter's type is checked at line 914.","commonSituations":"Requesting Genitive or Dative case for English or another locale that doesn't inflect time units by case. Using a locale that only supports the base IFormatter interface. Passing a culture from user preference that lacks case support.","solutions":["Use a culture whose formatter implements IGrammaticalCaseTimeSpanFormatter (e.g. Slavic locales).","Pass grammaticalCase: null for locales without case support.","Implement IGrammaticalCaseTimeSpanFormatter on your custom formatter."],"exampleFix":"// before\nvar s = ts.HumanizeWithCase(GrammaticalCase.Genitive, precision: 3, culture: new CultureInfo(\"en\"));\n\n// after\nvar s = ts.HumanizeWithCase(GrammaticalCase.Genitive, precision: 3, culture: new CultureInfo(\"ru\"));\n// or omit case for English: ts.Humanize(precision: 3)","handlingStrategy":"type-guard","validationCode":"static bool FormatterSupportsCase(IFormatter formatter) =>\n    formatter is IGrammaticalCaseTimeSpanFormatter;","typeGuard":"static bool CanHumanizeCaseForCulture(CultureInfo? culture)\n{\n    var formatter = Configurator.GetFormatter(culture);\n    return formatter is IGrammaticalCaseTimeSpanFormatter;\n}","tryCatchPattern":null,"preventionTips":["Check the formatter implements IGrammaticalCaseTimeSpanFormatter before requesting a case.","Use locales known to support case (e.g. Russian, Polish) for case-aware output.","Fall back to null grammaticalCase for unsupported locales."],"tags":["timespan","grammatical-case","formatter","locale","not-supported"],"backgroundTag":null,"analyzedSha":"ffc2b77c0f30d2fb176875841424379319d0ae9b","analyzedAt":"2026-08-13T21:42:34.584Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}