come rilevare la lingua del sistema operativo (locale) dal codice java

Qual è il modo corretto di conoscere la lingua del sistema operativo (locale) dal codice java?

Ho provato

Locale.getDefault() System.getProperties("user.language") 

eccetera.

ma non sono corretti niente in realtà visualizza il “Impostazioni di sistema” che è disponibile dal comando “systeminfo” in windows.

Per favore aiuto.

Il comando systeminfo Windows XP mostra molte cose, ma le informazioni rilevanti sono le seguenti:

 System Locale: en-us;English (United States) Input Locale: en-us;English (United States) 

Per ottenere informazioni equivalenti in Java, utilizzare Locale.getDefault() per ottenere le Locale.getDefault() locali utilizzate da Java e utilizzare i metodi sull’object Locale come getCountry() , getLanguage() per ottenere i dettagli. Le informazioni sono disponibili usando i codici ISO e come nomi leggibili / visualizzabili dall’uomo.

Notare che Locale.getDefault() fornisce le Locale.getDefault() locali che Java preleva dall’ambiente quando viene avviato, questo potrebbe o meno essere uguale Locale.getDefault() locale “sistema”. Per ottenere definitivamente le impostazioni locali “di sistema” in Java, è necessario fare cose specifiche della piattaforma. IMO, è più semplice assicurarsi che Java venga avviato con le impostazioni internazionali del sistema … se hai davvero bisogno di quelle informazioni.


AGGIORNAMENTO: Apparentemente, Java 7 ha cambiato il modo in cui le informazioni locali utilizzate da getDefault() sono determinate su Windows; vedere https://stackoverflow.com/a/8319889/139985

Che dire

 System.getProperty("user.country"); System.getProperty("user.language"); 

Restituisce nel mio caso

user.country = DE

user.language = de

È ansible generare facilmente la locale da queste informazioni. Local è ‘language’ _ ‘country’ quindi nel mio caso de_DE

Che ne dici di usare le impostazioni locali predefinite?

 Locale locale = Locale.getDefault(); String lang = locale.getDisplayLanguage(); String country = locale.getDisplayCountry(); 

Questo mi restituisce la lingua e il paese corrente secondo il comando systeminfo Windows. E ‘questo quello che stai cercando? (Se vuoi i codici a 2 caratteri per lingua / paese, puoi semplicemente usare getLanguage() o getCountry() ).

Per essere precisi, puoi provare il seguente codice:

 public Locale getLocale() { if (this.locale == null) { this.locale = new Locale(System.getProperty("user.language"), System.getProperty("user.country")); } return this.locale; }