Index: trunk/src/org/openstreetmap/josm/data/SystemOfMeasurement.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/SystemOfMeasurement.java	(revision 15394)
+++ trunk/src/org/openstreetmap/josm/data/SystemOfMeasurement.java	(revision 15395)
@@ -5,10 +5,11 @@
 
 import java.text.NumberFormat;
-import java.util.Collections;
-import java.util.LinkedHashMap;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Optional;
 import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import org.openstreetmap.josm.data.preferences.StringProperty;
@@ -25,10 +26,4 @@
 
     /**
-     * Preferences entry for system of measurement.
-     * @since 12674 (moved from ProjectionPreference)
-     */
-    public static final StringProperty PROP_SYSTEM_OF_MEASUREMENT = new StringProperty("system_of_measurement", "Metric");
-
-    /**
      * Interface to notify listeners of the change of the system of measurement.
      * @since 8554
@@ -49,5 +44,5 @@
      * @since 3406
      */
-    public static final SystemOfMeasurement METRIC = new SystemOfMeasurement(1, "m", 1000, "km", "km/h", 3.6, 10_000, "ha");
+    public static final SystemOfMeasurement METRIC = new SystemOfMeasurement(marktr("Metric"), 1, "m", 1000, "km", "km/h", 3.6, 10_000, "ha");
 
     /**
@@ -57,6 +52,6 @@
      * @since 3406
      */
-    public static final SystemOfMeasurement CHINESE = new SystemOfMeasurement(1.0/3.0, "\u5e02\u5c3a" /* chi */, 500, "\u5e02\u91cc" /* li */,
-            "km/h", 3.6, 666.0 + 2.0/3.0, "\u4ea9" /* mu */);
+    public static final SystemOfMeasurement CHINESE = new SystemOfMeasurement(marktr("Chinese"),
+            1.0/3.0, "\u5e02\u5c3a" /* chi */, 500, "\u5e02\u91cc" /* li */, "km/h", 3.6, 666.0 + 2.0/3.0, "\u4ea9" /* mu */);
 
     /**
@@ -64,5 +59,6 @@
      * @since 3406
      */
-    public static final SystemOfMeasurement IMPERIAL = new SystemOfMeasurement(0.3048, "ft", 1609.344, "mi", "mph", 2.23694, 4046.86, "ac");
+    public static final SystemOfMeasurement IMPERIAL = new SystemOfMeasurement(marktr("Imperial"),
+            0.3048, "ft", 1609.344, "mi", "mph", 2.23694, 4046.86, "ac");
 
     /**
@@ -70,5 +66,6 @@
      * @since 5549
      */
-    public static final SystemOfMeasurement NAUTICAL_MILE = new SystemOfMeasurement(185.2, "kbl", 1852, "NM", "kn", 1.94384);
+    public static final SystemOfMeasurement NAUTICAL_MILE = new SystemOfMeasurement(marktr("Nautical Mile"),
+            185.2, "kbl", 1852, "NM", "kn", 1.94384);
 
     /**
@@ -76,13 +73,12 @@
      * @since 3406
      */
-    public static final Map<String, SystemOfMeasurement> ALL_SYSTEMS;
-    static {
-        Map<String, SystemOfMeasurement> map = new LinkedHashMap<>();
-        map.put(marktr("Metric"), METRIC);
-        map.put(marktr("Chinese"), CHINESE);
-        map.put(marktr("Imperial"), IMPERIAL);
-        map.put(marktr("Nautical Mile"), NAUTICAL_MILE);
-        ALL_SYSTEMS = Collections.unmodifiableMap(map);
-    }
+    public static final Map<String, SystemOfMeasurement> ALL_SYSTEMS = Stream.of(METRIC, CHINESE, IMPERIAL, NAUTICAL_MILE)
+            .collect(Collectors.toMap(SystemOfMeasurement::getName, Function.identity()));
+
+    /**
+     * Preferences entry for system of measurement.
+     * @since 12674 (moved from ProjectionPreference)
+     */
+    public static final StringProperty PROP_SYSTEM_OF_MEASUREMENT = new StringProperty("system_of_measurement", getDefault().getName());
 
     private static final CopyOnWriteArrayList<SoMChangeListener> somChangeListeners = new CopyOnWriteArrayList<>();
@@ -142,4 +138,6 @@
     }
 
+    /** Translated name of this system of measurement. */
+    private final String name;
     /** First value, in meters, used to translate unit according to above formula. */
     public final double aValue;
@@ -169,4 +167,5 @@
      * x_a == x_m / aValue
      *
+     * @param name Translated name of this system of measurement
      * @param aValue First value, in meters, used to translate unit according to above formula.
      * @param aName First unit used to format text.
@@ -175,8 +174,8 @@
      * @param speedName the most common speed symbol (kmh/h, mph, kn, etc.)
      * @param speedValue the speed value for the most common speed symbol, for 1 meter per second
-     * @since 10175
-     */
-    public SystemOfMeasurement(double aValue, String aName, double bValue, String bName, String speedName, double speedValue) {
-        this(aValue, aName, bValue, bName, speedName, speedValue, -1, null);
+     * @since 15395
+     */
+    public SystemOfMeasurement(String name, double aValue, String aName, double bValue, String bName, String speedName, double speedValue) {
+        this(name, aValue, aName, bValue, bName, speedName, speedValue, -1, null);
     }
 
@@ -187,4 +186,5 @@
      * x_a == x_m / aValue
      *
+     * @param name Translated name of this system of measurement
      * @param aValue First value, in meters, used to translate unit according to above formula.
      * @param aName First unit used to format text.
@@ -197,8 +197,9 @@
      * @param areaCustomName Specific optional area unit. Set to {@code null} if not used.
      *
-     * @since 10175
-     */
-    public SystemOfMeasurement(double aValue, String aName, double bValue, String bName, String speedName, double speedValue,
+     * @since 15395
+     */
+    public SystemOfMeasurement(String name, double aValue, String aName, double bValue, String bName, String speedName, double speedValue,
             double areaCustomValue, String areaCustomName) {
+        this.name = name;
         this.aValue = aValue;
         this.aName = aName;
@@ -271,4 +272,29 @@
     }
 
+    /**
+     * Returns the translated name of this system of measurement.
+     * @return the translated name of this system of measurement
+     * @since 15395
+     */
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * Returns the default system of measurement for the current country.
+     * @return the default system of measurement for the current country
+     * @since 15395
+     */
+    public static SystemOfMeasurement getDefault() {
+        switch (Locale.getDefault().getCountry()) {
+            case "US":
+                // https://en.wikipedia.org/wiki/Metrication_in_the_United_States#Current_use
+                // Imperial units still used in transportation and Earth sciences
+                return IMPERIAL;
+            default:
+                return METRIC;
+        }
+    }
+
     private static String formatText(double v, String unit, NumberFormat format) {
         if (format != null) {
Index: trunk/src/org/openstreetmap/josm/tools/I18n.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/I18n.java	(revision 15394)
+++ trunk/src/org/openstreetmap/josm/tools/I18n.java	(revision 15395)
@@ -392,5 +392,5 @@
         /* try initial language settings, may be changed later again */
         if (!load(LanguageInfo.getJOSMLocaleCode())) {
-            Locale.setDefault(Locale.ENGLISH);
+            Locale.setDefault(new Locale("en", Locale.getDefault().getCountry()));
         }
     }
Index: trunk/src/org/openstreetmap/josm/tools/LanguageInfo.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/LanguageInfo.java	(revision 15394)
+++ trunk/src/org/openstreetmap/josm/tools/LanguageInfo.java	(revision 15395)
@@ -203,5 +203,5 @@
             l = new Locale(localeName.substring(0, country), localeName.substring(country + 1));
         } else {
-            l = new Locale(localeName);
+            l = new Locale(localeName, Locale.getDefault().getCountry());
         }
         return l;
