Languages and cultures

August 2, 2026 ยท View on GitHub

Humanizer localizes behavior by culture, not by translating one final string. Choose a culture for the operation, then confirm that its exact name has a generated Humanizer 4 accepted-culture mapping. Configurator.IsCultureSupported performs that exact-name check in application code. An accepted regional name can map to a neutral same-language profile, but Humanizer does not infer support by walking an arbitrary .NET parent chain.

Humanizer 4 ships its runtime, generated locale data, and analyzers in the single Humanizer package. Installing the package does not select a culture; the application still chooses one with CultureInfo.

Example

This complete example selects French explicitly:

using System.Globalization;
using Humanizer;

var french = CultureInfo.GetCultureInfo("fr-FR");
Console.WriteLine(42.ToWords(french));

The output is:

quarante-deux

Use culture selection for per-call and ambient-culture patterns. Use supported cultures for the current inventory. Use the scenario finder to reach the focused guide for number words, dates, clock notation, collections, or another localized task.

How culture resolution works

Do not infer support from a package name or English fallback. A regional culture can reuse a same-language profile such as fr only when its exact name is in the accepted-culture inventory. That mapping is an implementation detail, not partial support. Caller-created LocaliserRegistry<TLocaliser> instances retain their public parent-chain fallback behavior. Report incorrect inherited behavior just as you would incorrect directly authored behavior.

Found a wrong translation, parser result, or platform-specific format? Follow the language correction guide or open a prefilled locale issue.