2010-03-18 12 views
23

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

Ho provato

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

ecc

ma sono non corretti nulla effettivamente visualizza il "Sistema Locale", disponibile dal comando "systeminfo" nelle finestre.

Per favore aiuto.

risposta

27

Windows XP systeminfo comando visualizza un sacco di roba, ma le informazioni pertinenti è questa:

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 impostazioni internazionali che Java sta usando, e utilizzare metodi su l'oggetto Locale come getCountry(), getLanguage() per ottenere dettagli. Le informazioni sono disponibili usando i codici ISO e come nomi leggibili/visualizzabili dall'uomo.

Si noti che Locale.getDefault() fornisce la locale che Java preleva dall'ambiente quando viene avviato, questo può o meno essere uguale al 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.


UPDATE: A quanto pare, Java 7 ha cambiato il modo in cui l'informazione locale usato da getDefault() è determinato su Windows; vedi https://stackoverflow.com/a/8319889/139985

+0

Mi spiace, ho dimenticato di dirlo, ho cambiato la mia lingua in "francese" tramite il pannello di controllo-> opzioni regionali e della lingua. e quando corro sopra il codice restituisce il locale corretto (modificato) come "fr", ma quando eseguo "systeminfo" mostra ancora "en-US" come sistema e input locale. – Sudhir

+0

Potrebbe essere necessario chiudere il prompt dei comandi e aprirlo di nuovo. Come con molte cose di Windows, non è del tutto chiaro dove "systeminfo" sta ottenendo le informazioni che sta visualizzando. –

+0

come assicurarsi che Java venga avviato con le impostazioni internazionali del sistema? –

7

Come utilizzare le impostazioni locali predefinite?

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

Questo mi restituisce la mia lingua e il paese corrente come per il comando di Windows systeminfo. E 'questo quello che stai cercando? (Se si desidera utilizzare i codici a 2 caratteri per lingua/paese, è sufficiente utilizzare getLanguage() o getCountry()).

+0

Siamo spiacenti, ho dimenticato di dire che, ho cambiato la mia impostazione della lingua a " francese "attraverso il pannello di controllo-> opzioni regionali e linguistiche.e quando corro sopra il codice, si dà il corretto (modificato) locale come "fr", ma quando eseguo "systeminfo" mostra ancora "en-US" come sistema e input locale. – Sudhir

+0

Quindi la mia domanda è, È a causa della differenza tra "impostazioni locali utente" e "impostazioni internazionali di sistema" e ciò che viene modificato tramite il pannello di controllo è "impostazioni locali dell'utente" e non "impostazioni internazionali di sistema" e il codice restituisce "utente" locale "? allora qual è il metodo per ottenere il "sistema locale"? – Sudhir

11

Che dire

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

ritorni nel mio caso

user.country = DE

user.language = de

potete facilmente possibile generare il locale da queste informazioni. Locale è 'lingua' _ 'paese' così nel mio caso de_DE

+0

Come si confronta a Locale.getDefault()? – NateS

2

Per essere precisi, si può provare seguente codice:

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