From 0a3e88efca62441e72ea4b995d1ead51c4f7a418 Mon Sep 17 00:00:00 2001 From: goat Date: Thu, 26 Dec 2024 15:26:22 +0100 Subject: [PATCH] clone culture to apply fixes The default cultures are read-only --- Dalamud/Utility/CultureFixes.cs | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/Dalamud/Utility/CultureFixes.cs b/Dalamud/Utility/CultureFixes.cs index 0c048ed38..133e79c71 100644 --- a/Dalamud/Utility/CultureFixes.cs +++ b/Dalamud/Utility/CultureFixes.cs @@ -12,34 +12,41 @@ internal static class CultureFixes /// public static void Apply() { - PatchNumberSeparator(); + PatchFrenchNumberSeparator(); } - private static void PatchNumberSeparator() + private static void PatchFrenchNumberSeparator() { // Reset formatting specifier for the "digit grouping symbol" to an empty string // for cultures that use a narrow no-break space (U+202F). // This glyph is not present in any game fonts and not in the range for our Noto // so it will be rendered as a geta (=) instead. That's a hack, but it works and // doesn't look as weird. - void PatchCulture(CultureInfo info) + CultureInfo PatchCulture(CultureInfo info) { + var newCulture = (CultureInfo)info.Clone(); + const string invalidGroupSeparator = "\u202F"; const string replacedGroupSeparator = " "; + if (info.NumberFormat.NumberGroupSeparator == invalidGroupSeparator) - info.NumberFormat.NumberGroupSeparator = replacedGroupSeparator; - + newCulture.NumberFormat.NumberGroupSeparator = replacedGroupSeparator; + if (info.NumberFormat.NumberDecimalSeparator == invalidGroupSeparator) - info.NumberFormat.NumberDecimalSeparator = replacedGroupSeparator; + newCulture.NumberFormat.NumberDecimalSeparator = replacedGroupSeparator; if (info.NumberFormat.CurrencyGroupSeparator == invalidGroupSeparator) - info.NumberFormat.CurrencyGroupSeparator = replacedGroupSeparator; - + newCulture.NumberFormat.CurrencyGroupSeparator = replacedGroupSeparator; + if (info.NumberFormat.CurrencyDecimalSeparator == invalidGroupSeparator) - info.NumberFormat.CurrencyDecimalSeparator = replacedGroupSeparator; + newCulture.NumberFormat.CurrencyDecimalSeparator = replacedGroupSeparator; + + return newCulture; } - - PatchCulture(CultureInfo.CurrentCulture); - PatchCulture(CultureInfo.CurrentUICulture); + + CultureInfo.CurrentCulture = PatchCulture(CultureInfo.CurrentCulture); + CultureInfo.CurrentUICulture = PatchCulture(CultureInfo.CurrentUICulture); + CultureInfo.DefaultThreadCurrentCulture = CultureInfo.CurrentCulture; + CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.CurrentUICulture; } }