it-swarm.com.de

Java 7-Standardgebietsschema

Ich habe gerade jre7 installiert und bin erstaunt, dass mein Standardgebietsschema jetzt en_US ist. Bei jre6 war es de_CH.

Was ist bei jre7 anders? Ist das Standardgebietsschema nicht mehr das des Betriebssystems? (Übrigens, ich benutze Windows7)

Danke für deine Antwort. 

Edit: Ich habe das Gebietsschema für Category.FORMAT gesehen, das "alte" ist (de_CH). Das Gebietsschema für Category.DISPLAY übernimmt die Sprache aus der Sprache des Betriebssystems (unter Windows erfolgt dies in Systemsteuerung> Region und Sprache> Tastatur und Sprachen> Anzeigesprache) und das Betriebssystem von ...?

Was scheinbar anders ist, ist die Eigenschaft " user.country ". Mit Java6 bekomme ich "CH" und mit Java7 bekomme ich "US".

23
Zardo

Das ist wie geplant. Java 7 hat die Funktionsweise von Locale.getDefault() geändert. Bei Oracle ist ein Fehler aufgetreten, aber im Grunde heißt es "As Designed".

Zusammenfassend müssen Sie die Anzeigesprache des Betriebssystems ändern. Nur das Regionsformat zu ändern reicht nicht mehr aus.

Lesen Sie den Fehlerbericht hier: Locale.getDefault () gibt falsches Gebietsschema für Java SE 7 zurück

22
dream_team

Die Änderung wird in diesem Blogbeitrag und auf der Kompatibilitätsseite ziemlich gut beschrieben.

Beachten Sie, dass Sie zum alten Verhalten zurückkehren können, indem Sie die Systemeigenschaft Sun.locale.formatasdefault auf true setzen.

14
Jens Borgland

In Java 7 gibt es offenbar einige Änderungen in Bezug auf die Ländereinstellung, nämlich die Unterscheidung zwischen der Benutzeroberfläche und der Ländereinstellung für Benutzer. Siehe this . Es gibt jetztsetDefault(Locale.Category, Locale). Dies erklärt jedoch nicht wirklich, was Sie gerade erleben. Ich weise lediglich darauf hin, dass sich in Java 7 Änderungen hinsichtlich der Verarbeitung von Gebietsschemata ergeben haben.

4
merryprankster

Wie sieht es mit der Einstellung Ihres Gebietsschemas beim Start des Programms folgendermaßen aus, je nach Java-Version:

public class LocaleFormatter {

private static Locale locale;

private LocaleFormatter() {

}

public static Locale setDefaultLocale() {
    if (locale == null) {
        if (!System.getProperty("Java.version").startsWith("1.7.")) {
            locale = Locale.getDefault();
        } else {
            try {
                Class localeClass = Class.forName("Java.util.Locale");
                Class categoryClass = Class.forName("Java.util.Locale$Category");
                Object format = null;
                for (Object constant : categoryClass.getEnumConstants()) {
                    if (constant.toString().equals("FORMAT")) {
                        format = constant;
                    }
                }
                Method method = localeClass.getMethod("getDefault", categoryClass);

                locale = (Locale) method.invoke(Locale.getDefault(), format);
                Locale.setDefault(locale);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
    }
    return locale;
}

}

2
Alex Kartishev

Das sieht für mich wie ein Fehler aus:

public static void main(String[] args) throws FileNotFoundException, IOException {

System.err.println(Locale.getDefault());
}

wenn Sie dies mit Java 5 oder Java 6 ausführen, wird Folgendes gedruckt: 'nl_NL' Java7: 'en_US'

2
Johan Compagner

Überprüfen Sie die Einstellung "Ort" in der Windows-Systemsteuerung Regions- und Sprachoptionen (deutsch: "Region und Sprache", "Aufenthaltsort").

0
stracktracer

Wenn Sie mutig genug sind, können Sie Folgendes anrufen:

Locale.setDefault(Locale.getDefault());

Dadurch wird das Standardgebietsschema für diese beiden Kategorien festgelegt

public static synchronized void setDefault(Locale newLocale) {
   setDefault(Category.DISPLAY, newLocale);
   setDefault(Category.FORMAT, newLocale);
   defaultLocale = newLocale;
}

Dies kann aber natürlich zu Nebenwirkungen führen.

0
maryoush