diff --git a/src/main/java/serverutils/ServerUtilities.java b/src/main/java/serverutils/ServerUtilities.java index c6d0a25c..faa4f184 100644 --- a/src/main/java/serverutils/ServerUtilities.java +++ b/src/main/java/serverutils/ServerUtilities.java @@ -65,7 +65,12 @@ public static CommandException errorFeatureDisabledServer(@Nullable ICommandSend @Mod.EventHandler public void onPreInit(FMLPreInitializationEvent event) { + // Keep string handling on US English, mainly to avoid the Turkish dotless I breaking case conversions. + // Number and date formatting stays on the player's locale, other mods read it to format their own output. + final Locale formatLocale = Locale.getDefault(Locale.Category.FORMAT); Locale.setDefault(Locale.US); + Locale.setDefault(Locale.Category.FORMAT, formatLocale); + PROXY.preInit(event); } diff --git a/src/main/java/serverutils/lib/util/StringUtils.java b/src/main/java/serverutils/lib/util/StringUtils.java index fcb291cb..f85d2ed4 100644 --- a/src/main/java/serverutils/lib/util/StringUtils.java +++ b/src/main/java/serverutils/lib/util/StringUtils.java @@ -6,11 +6,13 @@ import java.io.Reader; import java.math.RoundingMode; import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.HashMap; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.UUID; import java.util.regex.Pattern; @@ -45,8 +47,13 @@ public class StringUtils { .compareToIgnoreCase(getID(o2, FLAG_ID_FIX)); public static final Map TEMP_MAP = new HashMap<>(); - public static final DecimalFormat DOUBLE_FORMATTER_00 = new DecimalFormat("#0.00"); - public static final DecimalFormat DOUBLE_FORMATTER_0 = new DecimalFormat("#0.0"); + // Root locale, formatDouble0 and formatDouble00 trim the fraction by looking for a dot. + public static final DecimalFormat DOUBLE_FORMATTER_00 = new DecimalFormat( + "#0.00", + DecimalFormatSymbols.getInstance(Locale.ROOT)); + public static final DecimalFormat DOUBLE_FORMATTER_0 = new DecimalFormat( + "#0.0", + DecimalFormatSymbols.getInstance(Locale.ROOT)); public final static int[] INT_SIZE_TABLE = { 9, 99, 999, 9999, 99999, 999999, 9999999, 99999999, 999999999, Integer.MAX_VALUE };