diff --git a/src/Humanizer/Configuration/Configurator.cs b/src/Humanizer/Configuration/Configurator.cs index d6c266c7e..25f24970a 100644 --- a/src/Humanizer/Configuration/Configurator.cs +++ b/src/Humanizer/Configuration/Configurator.cs @@ -13,7 +13,7 @@ public static class Configurator /// /// A registry of formatters used to format strings based on the current locale /// - public static LocaliserRegistry Formatters { get; } = new FormatterRegistry(); + public static LocaliserRegistry Formatters { get; } = FormatterRegistry.CreateInstance(); /// /// A registry of number to words converters used to localise ToWords and ToOrdinalWords methods diff --git a/src/Humanizer/Configuration/FormatterRegistry.cs b/src/Humanizer/Configuration/FormatterRegistry.cs index b7c1e66ca..31a7c67b0 100644 --- a/src/Humanizer/Configuration/FormatterRegistry.cs +++ b/src/Humanizer/Configuration/FormatterRegistry.cs @@ -2,8 +2,27 @@ { class FormatterRegistry : LocaliserRegistry { - public FormatterRegistry() : base(new DefaultFormatter("en-US")) + public static FormatterRegistry CreateInstance() { + try + { + return new FormatterRegistry(new DefaultFormatter("en-US"), false); + } + catch (CultureNotFoundException) + { + // InvariantGlobalization is enabled, there is only one culture. + return new FormatterRegistry(new DefaultFormatter(CultureInfo.InvariantCulture), true); + } + } + + private FormatterRegistry(IFormatter defaultFormatter, bool globalizationInvariant) + : base(defaultFormatter) + { + if (globalizationInvariant) + { + return; + } + Register("ar", new ArabicFormatter()); Register("de", new GermanFormatter()); Register("he", new HebrewFormatter()); diff --git a/src/Humanizer/Localisation/Formatters/DefaultFormatter.cs b/src/Humanizer/Localisation/Formatters/DefaultFormatter.cs index a336cf399..de349d4bb 100644 --- a/src/Humanizer/Localisation/Formatters/DefaultFormatter.cs +++ b/src/Humanizer/Localisation/Formatters/DefaultFormatter.cs @@ -11,6 +11,10 @@ public class DefaultFormatter : IFormatter public DefaultFormatter(string localeCode) => _culture = new(localeCode); + /// Culture to use. + internal DefaultFormatter(CultureInfo culture) => + _culture = culture; + public virtual string DateHumanize_Now() => GetResourceForDate(TimeUnit.Millisecond, Tense.Past, 0);