2010-03-18 11 views
23

Was ist die richtige Art zu wissen, Betriebssystemsprache (Gebietsschema) von Java-Code?Wie Betriebssystemsprache (Gebietsschema) von Java-Code zu erkennen

Ich habe

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

usw.

aber sie sind nicht korrekt eigentlich nichts auf das „System Locale“ anzeigt, die durch den Befehl „Systeminfo“ in Windows zur Verfügung steht.

Bitte helfen.

Antwort

27

Die Windows XP systeminfo Befehl zeigt viele Sachen, aber die relevanten Informationen ist dies:

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

gleichwertige Informationen in Java zu erhalten, verwenden Locale.getDefault() die Locale zu bekommen, dass Java verwendet, und Methoden zur Verwendung das Gebietsschema-Objekt wie getCountry(), getLanguage(), um Details zu erhalten. Die Information ist verfügbar unter Verwendung von ISO-Codes und als von Menschen lesbare/anzeigbare Namen.

Beachten Sie, dass Locale.getDefault() Ihnen das Gebietsschema gibt, das Java beim Starten von der Umgebung abruft. Dies kann dasselbe wie das Gebietsschema "system" sein oder auch nicht. Um das Gebietsschema "System" definitiv in Java zu erhalten, müssten Sie plattformspezifische Dinge tun. IMO, es ist einfacher sicherzustellen, dass Java mit dem Systemgebietsschema gestartet wird ... wenn Sie diese Informationen wirklich benötigen.


UPDATE: Anscheinend hat Java 7 die Art und Weise geändert, dass die locale Informationen von getDefault() verwendet wird, auf Windows bestimmt; siehe https://stackoverflow.com/a/8319889/139985

+0

Entschuldigung, ich habe vergessen zu erwähnen, dass ich meine Spracheinstellung auf "Französisch" über Systemsteuerung-> Regions- und Sprachoptionen geändert habe. und wenn ich oben Code ausgeführt wird gibt es korrekte (geänderte) Ländereinstellung als "fr", aber wenn ich "Systeminfo" ausführen zeigt es immer noch "en-US" als System und Eingabegebietsschema. – Sudhir

+0

Möglicherweise müssen Sie die Eingabeaufforderung schließen und erneut öffnen. Wie bei vielen Dingen Windows ist es nicht ganz klar, wo "systeminfo" die Information bekommt, die es anzeigt. –

+0

Wie stellen Sie sicher, dass Java mit dem Systemgebietsschema gestartet wird? –

7

Wie wäre es mit dem Standardgebietsschema?

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

Das gibt mir meine aktuelle Sprache und das Land nach dem Windows-systeminfo Befehl. Ist das wonach Sie suchen? (Wenn Sie die 2-stelligen Codes für Sprache/Land wünschen, können Sie einfach oder getCountry() verwenden).

+0

Sorry, ich vergaß zu erwähnen, ich meine Spracheinstellung auf " Französisch "über Systemsteuerung-> regionale und sprachliche Optionen.und wenn ich über Code lief, gibt es richtiges (geändertes) Gebietsschema als "fr", aber wenn ich "systeminfo" ausführe, zeigt es noch "en-US" als System- und Eingabe-Gebietsschema an. – Sudhir

+0

Also meine Frage ist, Ist das wegen des Unterschieds zwischen "Benutzergebietsschema" und "Systemgebietsschema", und was wir über Systemsteuerung ändern, ist "Benutzergebietsschema" und nicht das "Systemgebietsschema", und oben Code gibt "Benutzer Gebietsschema "? dann, was ist die Methode, um das "Systemgebietsschema" zu bekommen? – Sudhir

11

Was

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

Returns in meinem Fall

user.country = DE

user.language = de

Sie leicht die erzeugen kann Gebietsschema aus dieser Information. Lokale sind ‚Sprache‘ _ ‚Land‘ so in meinem Fall de_DE

+0

Wie vergleicht das mit Locale.getDefault()? – NateS

2

Um genau zu sein, Sie folgenden Code versuchen:

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