windows - Java 7 standard locale

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har lige installeret jre7 og jeg er overrasket over at se, at min standard locale er nu en\_US. Med jre6 var det de\_CH.


Hvad er forskelligt med jre7? Er standard locale ikke mere det operativsystem? (btw, jeg bruger Windows7)


Thx til dit svar.


Redigere:
Jeg har set Locale for Category.FORMAT er den 'gamle' en (de\_CH). Locale for Category.DISPLAY tager sproget fra OS-sproget (i Windows er dette gjort i Kontrolpanel> Region og sprog> Tastatur og sprog> Displaysprog) og modstanden fra ... ?


Hvad der synes at være anderledes er ejendommen ' user.country '. Med Java6 får jeg 'CH' og med Java7 får jeg 'US'.

Bedste reference


Dette er som designet. Java 7 har ændret den måde, Locale.getDefault() fungerer på. Der er indtastet en defekt med Oracle, men de siger dybest set, at dette er som designet.


Sammenfattende skal du ændre OS-sprogets displaysprog. Det er ikke længere tilstrækkeligt at ændre regionformatet.


Læs fejlrapporten her: Locale.getDefault () returnerer forkert Lokal for Java SE 7 [9]

Andre referencer 1


Ændringen beskrives ret godt i dette blogindlæg og på kompatibilitetssiden. [10] [11]


Bemærk at du kan vende tilbage til den gamle adfærd ved at indstille sun.locale.formatasdefault systemegenskaben til true.

Andre referencer 2


Der synes at være nogle ændringer vedrørende Locale i Java 7, nemlig differentiering mellem brugergrænseflade og 'bruger' lokalitet. Se dette. Der er nu setDefault(Locale.Category, Locale). Dette forklarer dog ikke rigtigt hvad du oplever - jeg påpeger blot, at der er sket ændringer i Java 7 vedrørende lokalhåndtering. [12] [13]

Andre referencer 3


Dette ser virkelig ud som en fejl for mig:


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

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


kører dette med java 5 eller java 6 udskrifter: 'nl\_NL'
java7: 'en\_US'

Andre referencer 4


Hvad med at indstille din lokalitet i starten af ​​programmet på følgende måde afhængigt af java-versionen:


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;
}


}

Andre referencer 5


Kontroller indstillingen 'Placering' i Windows-kontrolpanelet Regionale og sproglige indstillinger (tysk: 'Region und Sprache', 'Aufenthaltsort').

Andre referencer 6


Hvis du er modig nok, kan du ringe til:


Locale.setDefault(Locale.getDefault());


Dette angiver standard Locale for begge disse kategorier


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


Men det kan naturligvis forårsage bivirkninger.