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/client/gui/GuiRestoreBackup.java b/src/main/java/serverutils/client/gui/GuiRestoreBackup.java index ef929a02..9a823d47 100644 --- a/src/main/java/serverutils/client/gui/GuiRestoreBackup.java +++ b/src/main/java/serverutils/client/gui/GuiRestoreBackup.java @@ -18,6 +18,7 @@ import java.util.Comparator; import java.util.LinkedHashMap; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Set; import java.util.function.Consumer; @@ -62,7 +63,8 @@ @EventBusSubscriber(side = Side.CLIENT) public class GuiRestoreBackup extends GuiButtonListBase { - private static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss"); + // Root locale, BackupTask.BACKUP_NAME_PATTERN only matches ASCII digits. + private static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss", Locale.ROOT); private static final Set allBackupFiles = new ObjectOpenHashSet<>(); private static Object2ObjectMap> worldBackups; private final List backupFiles; 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 }; diff --git a/src/main/java/serverutils/task/backup/ThreadBackup.java b/src/main/java/serverutils/task/backup/ThreadBackup.java index 6cb5b191..98bfb09d 100644 --- a/src/main/java/serverutils/task/backup/ThreadBackup.java +++ b/src/main/java/serverutils/task/backup/ThreadBackup.java @@ -35,6 +35,7 @@ import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Set; import java.util.zip.CRC32; @@ -62,7 +63,8 @@ public class ThreadBackup extends Thread { - private static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss"); + // Root locale, BackupTask.BACKUP_NAME_PATTERN only matches ASCII digits. + private static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss", Locale.ROOT); private static long logMillis; private final File src0; private final String customName;