Index: trunk/src/org/openstreetmap/josm/tools/I18n.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/I18n.java	(revision 4209)
+++ trunk/src/org/openstreetmap/josm/tools/I18n.java	(revision 4211)
@@ -286,10 +286,5 @@
             for (String loc : languages.keySet()) {
                 if(Main.class.getResource("/data/"+loc+".lang") != null) {
-                    int i = loc.indexOf('_');
-                    if (i > 0) {
-                        v.add(new Locale(loc.substring(0, i), loc.substring(i + 1)));
-                    } else {
-                        v.add(new Locale(loc));
-                    }
+                    v.add(LanguageInfo.getLocale(loc));
                 }
             }
@@ -322,7 +317,8 @@
         languages.put("fr", PluralMode.MODE_GREATERONE);
         languages.put("gl", PluralMode.MODE_NOTONE);
+        languages.put("he", PluralMode.MODE_NOTONE);
+        //languages.put("id", PluralMode.MODE_NONE);
         languages.put("is", PluralMode.MODE_NOTONE);
         languages.put("it", PluralMode.MODE_NOTONE);
-        languages.put("iw_IL", PluralMode.MODE_NOTONE);
         languages.put("ja", PluralMode.MODE_NONE);
         languages.put("nb", PluralMode.MODE_NOTONE);
@@ -594,15 +590,6 @@
     public static void set(String localeName){
         if (localeName != null) {
-            Locale l;
-            if (localeName.equals("he")) {
-                localeName = "iw_IL";
-            }
-            int i = localeName.indexOf('_');
-            if (i > 0) {
-                l = new Locale(localeName.substring(0, i), localeName.substring(i + 1));
-            } else {
-                l = new Locale(localeName);
-            }
-            if (load(localeName)) {
+            Locale l = LanguageInfo.getLocale(localeName);
+            if (load(LanguageInfo.getJOSMLocaleCode(l))) {
                 Locale.setDefault(l);
             } else {
Index: trunk/src/org/openstreetmap/josm/tools/LanguageInfo.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/LanguageInfo.java	(revision 4209)
+++ trunk/src/org/openstreetmap/josm/tools/LanguageInfo.java	(revision 4211)
@@ -67,4 +67,6 @@
         if (full.equals("iw_IL"))
             return "he";
+        else if (full.equals("in"))
+            return "id";
         /* list of non-single codes supported by josm */
         else if (full.equals("en_GB") || full.equals("pt_BR") || full.equals("en_AU") || full.equals("zh_TW") || full.equals("zh_CN"))
@@ -72,4 +74,29 @@
 
         return locale.getLanguage();
+    }
+
+    /**
+     * Replies the locale code used by Java for a given locale.
+     *
+     * In most cases JOSM and Java uses the same codes, but for some exceptions this is needed.
+     *
+     * @param code the locale code.
+     * @return the resulting locale
+     */
+    static public Locale getLocale(String localeName) {
+        if (localeName.equals("he")) {
+            localeName = "iw_IL";
+        }
+        else if (localeName.equals("id")) {
+            localeName = "in";
+        }
+        Locale l;
+        int i = localeName.indexOf('_');
+        if (i > 0) {
+            l = new Locale(localeName.substring(0, i), localeName.substring(i + 1));
+        } else {
+            l = new Locale(localeName);
+        }
+        return l;
     }
 
