Index: trunk/src/org/openstreetmap/josm/gui/preferences/display/LanguagePreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/display/LanguagePreference.java	(revision 16657)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/display/LanguagePreference.java	(revision 16660)
@@ -6,5 +6,4 @@
 import java.awt.Component;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Comparator;
 import java.util.List;
@@ -85,7 +84,7 @@
         LanguageComboBoxModel() {
             data.add(0, null);
-            List<Locale> locales = Arrays.asList(I18n.getAvailableTranslations());
-            locales.sort(Comparator.comparing(Locale::getDisplayLanguage));
-            data.addAll(locales);
+            I18n.getAvailableTranslations()
+                    .sorted(Comparator.comparing(Locale::getDisplayLanguage))
+                    .forEachOrdered(data::add);
         }
 
Index: trunk/src/org/openstreetmap/josm/tools/I18n.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/I18n.java	(revision 16657)
+++ trunk/src/org/openstreetmap/josm/tools/I18n.java	(revision 16660)
@@ -12,8 +12,4 @@
 import java.nio.file.InvalidPathException;
 import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Comparator;
 import java.util.HashMap;
 import java.util.Locale;
@@ -21,4 +17,5 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import java.util.stream.Stream;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
@@ -362,18 +359,9 @@
      * @return an array of locale objects.
      */
-    public static Locale[] getAvailableTranslations() {
-        Collection<Locale> v = new ArrayList<>(languages.size());
-        if (getTranslationFile("en") != null) {
-            for (String loc : languages.keySet()) {
-                if (getTranslationFile(loc) != null) {
-                    v.add(LanguageInfo.getLocale(loc));
-                }
-            }
-        }
-        v.add(Locale.ENGLISH);
-        Locale[] l = new Locale[v.size()];
-        l = v.toArray(l);
-        Arrays.sort(l, Comparator.comparing(Locale::toString));
-        return l;
+    public static Stream<Locale> getAvailableTranslations() {
+        Stream<String> languages = Stream.concat(
+                getTranslationFile("en") != null ? I18n.languages.keySet().stream() : Stream.empty(),
+                Stream.of("en"));
+        return languages.filter(loc -> getTranslationFile(loc) != null).map(LanguageInfo::getLocale);
     }
 
Index: trunk/src/org/openstreetmap/josm/tools/JosmDecimalFormatSymbolsProvider.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/JosmDecimalFormatSymbolsProvider.java	(revision 16657)
+++ trunk/src/org/openstreetmap/josm/tools/JosmDecimalFormatSymbolsProvider.java	(revision 16660)
@@ -5,4 +5,6 @@
 import java.text.spi.DecimalFormatSymbolsProvider;
 import java.util.Locale;
+import java.util.function.Function;
+import java.util.stream.Stream;
 
 /**
@@ -26,5 +28,10 @@
     @Override
     public Locale[] getAvailableLocales() {
-        return I18n.getAvailableTranslations();
+        return Stream.of(
+                Stream.of(Locale.ROOT),
+                Stream.of("", "AU", "IE", "US", "UK").map(country -> new Locale("en", country, "")),
+                Stream.of("", "AT", "CH", "DE").map(country -> new Locale("de", country, "")),
+                I18n.getAvailableTranslations()
+        ).flatMap(Function.identity()).toArray(Locale[]::new);
     }
 
