Javaコードからオペレーティングシステムの言語(ロケール)を知る正しい方法は何ですか?
私が試してみました
Locale.getDefault()
System.getProperties("user.language")
等.
しかし、それらは正しくありません。実際には、Windowsのコマンド「systeminfo」で使用可能な「システムロケール」は表示されません。
助けてください。
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 を参照してください
どう?
System.getProperty("user.country");
System.getProperty("user.language");
私の場合に戻ります
user.country = DE
user.language = de
この情報からロケールを簡単に生成できます。ローカルは 'language' _ 'country'なので、私の場合はde_DE
デフォルトのロケールを使用してはどうですか?
_Locale locale = Locale.getDefault();
String lang = locale.getDisplayLanguage();
String country = locale.getDisplayCountry();
_
これにより、Windows systeminfo
コマンドに従って現在の言語と国が返されます。これはあなたが探しているものですか? (言語/国の2文字のコードが必要な場合は、getLanguage()
またはgetCountry()
を使用できます)。
正確には、次のコードを試すことができます:
public Locale getLocale() {
if (this.locale == null) {
this.locale = new Locale(System.getProperty("user.language"), System.getProperty("user.country"));
}
return this.locale;
}