spanish language example en_us java windows windows-7 locale java-7

java - language - locale format



ConfiguraciĆ³n regional predeterminada de Java 7 (7)

Acabo de instalar jre7 y me sorprende ver que mi configuración predeterminada ahora es en_US. Con jre6 fue de_CH.

¿Qué es diferente con jre7? ¿La configuración regional predeterminada no es más la del sistema operativo? (por cierto, estoy usando Windows 7)

Thx por tu respuesta.

Editar: he visto la configuración regional para Category.FORMAT es la "anterior" (de_CH). La configuración regional de Category.DISPLAY toma el idioma del idioma del sistema operativo (en Windows esto se hace en Panel de control> Región e idioma> Teclado e idiomas> Idioma de visualización) y el país desde ...?

Lo que parece ser diferente es la propiedad " user.country ". Con Java6 obtengo "CH" y con Java7 obtengo "US".


¿Qué hay de configurar su configuración regional al inicio del programa de la siguiente manera, dependiendo de la versión 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; }

}


Compruebe la configuración "Ubicación" en el panel de control de Windows Regional y las opciones de idioma (alemán: "Region und Sprache", "Aufenthaltsort").


El cambio se describe bastante bien en esta publicación de blog y en la página de compatibilidad .

Tenga en cuenta que puede volver al comportamiento anterior estableciendo la propiedad del sistema sun.locale.formatasdefault en true .


Esto realmente me parece un error:

public static void main(String[] args) throws FileNotFoundException, IOException { System.err.println(Locale.getDefault()); }

ejecutando esto con java 5 o java 6 impresiones: ''nl_NL'' java7: ''en_US''


Parece haber algunos cambios con respecto a la configuración regional en Java 7, a saber, la diferenciación entre la interfaz de usuario y la configuración regional de "usuario". Mira this Ahora hay setDefault(Locale.Category, Locale) . Sin embargo, esto realmente no explica lo que está experimentando, simplemente estoy señalando el hecho de que ha habido cambios en Java 7 con respecto al manejo de la configuración regional.


Si eres lo suficientemente valiente, puedes llamar a:

Locale.setDefault(Locale.getDefault());

Esto establece la configuración regional predeterminada para ambas categorías

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

Pero esto, por supuesto, podría causar efectos secundarios.


Esto es como está diseñado. Java 7 ha cambiado la forma en que funciona Locale.getDefault() . Se ha ingresado un defecto con Oracle, pero básicamente dijeron que esto es como se diseñó.

Para resumir, debe modificar el idioma de visualización del sistema operativo. La modificación del formato de región solo ya no es suficiente.

Lea el informe de error aquí: Locale.getDefault () devuelve una configuración regional incorrecta para Java SE 7