From 316478ecaf706909bc97f1bc13e5f43afac24ca9 Mon Sep 17 00:00:00 2001 From: Pavel Tupitsyn Date: Sat, 25 Jun 2022 18:19:03 +0300 Subject: [PATCH 1/2] Fix init crash "Only the invariant culture is supported in globalization-invariant mode" --- src/Humanizer/Configuration/Configurator.cs | 2 +- .../Configuration/FormatterRegistry.cs | 21 ++++++++++++++++++- .../Formatters/DefaultFormatter.cs | 9 ++++++++ 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/Humanizer/Configuration/Configurator.cs b/src/Humanizer/Configuration/Configurator.cs index 157d76865..1ab3067d2 100644 --- a/src/Humanizer/Configuration/Configurator.cs +++ b/src/Humanizer/Configuration/Configurator.cs @@ -28,7 +28,7 @@ public static LocaliserRegistry CollectionFormatters get { return _collectionFormatters; } } - private static readonly LocaliserRegistry _formatters = new FormatterRegistry(); + private static readonly LocaliserRegistry _formatters = FormatterRegistry.CreateInstance(); /// /// A registry of formatters used to format strings based on the current locale /// diff --git a/src/Humanizer/Configuration/FormatterRegistry.cs b/src/Humanizer/Configuration/FormatterRegistry.cs index f4963d80b..a8b55c831 100644 --- a/src/Humanizer/Configuration/FormatterRegistry.cs +++ b/src/Humanizer/Configuration/FormatterRegistry.cs @@ -6,8 +6,27 @@ namespace Humanizer.Configuration { internal 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 baa74d7e6..d8db05595 100644 --- a/src/Humanizer/Localisation/Formatters/DefaultFormatter.cs +++ b/src/Humanizer/Localisation/Formatters/DefaultFormatter.cs @@ -19,6 +19,15 @@ public DefaultFormatter(string localeCode) _culture = new CultureInfo(localeCode); } + /// + /// Constructor. + /// + /// Culture to use. + internal DefaultFormatter(CultureInfo culture) + { + _culture = culture; + } + /// /// Now /// From bea82a0c397b31d285ef046a4370622ac4b89876 Mon Sep 17 00:00:00 2001 From: Pavel Tupitsyn Date: Mon, 19 Feb 2024 08:31:10 +0200 Subject: [PATCH 2/2] Fix merge --- src/Humanizer/Configuration/Configurator.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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