web-dev-qa-db-ja.com

Javaコードからオペレーティングシステムの言語(ロケール)を検出する方法

Javaコードからオペレーティングシステムの言語(ロケール)を知る正しい方法は何ですか?

私が試してみました

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

等.

しかし、それらは正しくありません。実際には、Windowsのコマンド「systeminfo」で使用可能な「システムロケール」は表示されません。

助けてください。

26
Sudhir

Windows XP systeminfoコマンドは多くのものを表示しますが、関連情報は次のとおりです。

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

Javaで同等の情報を取得するには、Locale.getDefault()を使用してJavaが使用しているロケールを取得し、 getCountry()getLanguage() 詳細を取得する情報は、ISOコードを使用して、人間が読める/表示可能な名前として使用できます。

Locale.getDefault()は、Javaが起動時に環境から取得するロケールを提供することに注意してください。これは、「システム」ロケールと同じである場合とそうでない場合があります。 Javaでプラットフォーム固有のことを行う必要があります。IMO、Javaがシステムで開始されることを確認する方が簡単です。ロケール...本当にその情報が必要な場合。


UPDATE:どうやら、Java 7はgetDefault()によって使用されるロケール情報の方法を変更しましたWindowsで決定されます; https://stackoverflow.com/a/8319889/139985 を参照してください

29
Stephen C

どう?

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

私の場合に戻ります

user.country = DE

user.language = de

この情報からロケールを簡単に生成できます。ローカルは 'language' _ 'country'なので、私の場合はde_DE

14
Markus Lausberg

デフォルトのロケールを使用してはどうですか?

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

これにより、Windows systeminfoコマンドに従って現在の言語と国が返されます。これはあなたが探しているものですか? (言語/国の2文字のコードが必要な場合は、getLanguage()またはgetCountry()を使用できます)。

8
Ash

正確には、次のコードを試すことができます:

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