Je viens d'installer jre7 et je suis surpris de voir que mes paramètres régionaux par défaut sont maintenant en_US. Avec jre6 c'était de_CH.
Qu'est-ce qui est différent avec jre7? Les paramètres régionaux par défaut ne sont-ils plus ceux du système d'exploitation? (d'ailleurs, j'utilise Windows7)
Merci pour votre réponse.
Edit: J'ai vu les paramètres régionaux pour Category.FORMAT est "l'ancien" (de_CH). Le paramètre régional pour Catégorie.DISPLAY prend la langue de la langue du système d'exploitation (sous Windows, cela se fait dans Panneau de configuration> Région et langue> Clavier et langues> Langue d'affichage) et le contrôle de ...?
Ce qui semble être différent est la propriété " user.country ". Avec Java6, je reçois "CH" et avec Java7, je reçois "US".
C'est comme prévu. Java 7 a changé le fonctionnement de Locale.getDefault()
. Un défaut a été entré avec Oracle, mais ils ont essentiellement dit que c'était comme prévu.
Pour résumer, vous devez modifier la langue d'affichage du système d'exploitation. La modification du format de région seulement ne suffit plus.
Lisez le rapport de bogue ici: Locale.getDefault () renvoie un mauvais locale pour Java SE 7
Le changement est très bien décrit dans cet article de blog et sur la page de compatibilité .
Notez que vous pouvez rétablir l'ancien comportement en définissant la propriété système Sun.locale.formatasdefault
sur true
.
Il semble y avoir quelques changements concernant les paramètres régionaux dans Java 7, à savoir la différenciation entre les paramètres régionaux UI et «utilisateur». Voir this . Il y a maintenantsetDefault(Locale.Category, Locale)
. Cependant, cela n’explique pas vraiment ce que vous vivez - je souligne simplement le fait que Java 7 a été modifié en ce qui concerne la gestion des paramètres régionaux.
Qu'en est-il de définir vos paramètres régionaux au début du programme de la manière suivante, selon la version de Java:
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;
}
}
Cela ressemble vraiment à un bug pour moi:
public static void main(String[] args) throws FileNotFoundException, IOException {
System.err.println(Locale.getDefault());
}
cette opération avec Java 5 ou Java 6 affiche: 'nl_NL' Java7: 'en_US'
Vérifiez le paramètre "Emplacement" dans le panneau de configuration de Windows. Options régionales et linguistiques (allemand: "Région et ressources", "Aufenthaltsort").
Si vous êtes assez courageux, vous pouvez appeler le:
Locale.setDefault(Locale.getDefault());
Ceci définit les paramètres régionaux par défaut pour ces deux catégories.
public static synchronized void setDefault(Locale newLocale) {
setDefault(Category.DISPLAY, newLocale);
setDefault(Category.FORMAT, newLocale);
defaultLocale = newLocale;
}
Mais cela pourrait bien sûr causer des effets secondaires.