2012-06-02 17 views
7

Me encuentro con un tipo de problema aquí.Obteniendo el lenguaje OS en java

Soy francés y trabajo en una versión en inglés de Windows XP. Por lo tanto, establezco las opciones regionales en francés, pero todavía tengo una interfaz de usuario en inglés.

Estoy trabajando en una pequeña aplicación Java SE, y decidió internacionalizar que el uso de los recursos paquete.

para visualizar el idioma adecuado, se crea el paquete con esta función:

private static ResourceBundle bundle = ResourceBundle 
      .getBundle("locale.Strings", Locale.getDefault()); 

Pero la función Locale.getDefault() devuelve la configuración regional (es decir: francés) y no el lenguaje de interfaz de usuario del sistema. Como resultado, mi interfaz de usuario se establece de forma predeterminada en francés, en un entorno inglés. Y bueno, eso no es realmente lo que esperaba ...

¿Alguien sabe de una manera independiente de la plataforma para recuperar el idioma de la interfaz del sistema? ¡Gracias de antemano!

Editar: fijo Local a Locale, gracias.

+1

Bueno, me parece que lo que hace Java es lo correcto. Si configuró su sistema operativo con las preferencias francesas y el sistema operativo sigue mostrando todo en inglés, pero no en Java, el sistema operativo no está bien, pero Java sí, ¿verdad? Si quieres todo en inglés, ¿por qué no lo configuras con las preferencias en inglés? –

+0

¿no debería ser 'Locale.getDefault()' y no 'Local.getDefault()'? –

+7

@JBNizet no es un requisito tan inusual. Soy holandés y, al igual que OP, prefiero que mi GUI sea inglés, mientras que los formatos numéricos y los formatos de fecha aparecen de la manera en que estoy acostumbrado en mi propia configuración regional (por ejemplo, las fechas de primer mes de América son bastante me confunde, requiriendo tiempo de análisis adicional en mi cerebro). Las traducciones de software a menudo son abismales, doblemente en dominios como la programación donde la jerga es el inglés. – Barend

Respuesta

7

Esta es una configuración incorrecta en Windows. El Locale#getDefault() devuelve la configuración regional del sistema, no la región o ubicación de formato de fecha/hora.

En el siguiente Windows XP pantalla específica, usted podría establecer el Configuración regional y de idioma al francés o lo que quiera. La lista desplegable en el menú Advanced en realidad establece la configuración regional del sistema y, en su caso, debe configurarse en inglés.

enter image description here

Es cierto que esto es en Windows XP mal explicado, Windows 7 lo hace un poco mejor:

enter image description here

+1

No es tan obvio. Hay una diferencia entre Java 7 y versiones anteriores. Además, puede haber una diferencia entre la versión localizada y MUI de Windows, pero en este caso esperaría inglés en lugar de francés. Es complicado :) –

3

no tengo medios para probarlo (ya que tienden a evitar cualquier cosa hecha por Microsoft), pero echa un vistazo a los siguientes:

Java 7 requerido:

Locale uiLocale = Locale.getDefault(Locale.Category.DISPLAY); 

Eso es lo que se debe usar para obtener traducciones (comenzando desde Java 7), de todos modos.

Si esto no era muy útil, que iba a tratar:

System.out.println(System.getenv("LC_MESSAGES"));  
System.out.println(System.getenv("LANG")); 
System.out.println(System.getenv("LANGUAGE")); 

Sin embargo, en este caso yo esperaría a algunas similitudes regional predeterminada ...

0

he intentado un par de cosas, gracias a sus sugerencias, y aquí está mi observación:

  • Si está utilizando Java 6, y no Java 7, está f *** ed.
  • Si está utilizando Java 7, debe hacer lo que le dice BalusC: cambie la configuración en Configuración de región e idioma. Después de eso, Locale.getDefault() devolverá de manera predeterminada el idioma de visualización, es decir, inglés si lo configura en inglés. Para asegurarse de ello, puede crear su configuración regional llamando a Locale.getDefault (Locale.Category.PANTALLA)
Cuestiones relacionadas