Jre7をインストールしたばかりで、デフォルトのロケールがen_USになっていることに驚いています。 jre6ではde_CHでした。
Jre7の違いは何ですか?デフォルトのロケールは、オペレーティングシステムの1つではありませんか? (ところで、私はWindows7を使用しています)
あなたの答えのためのThx。
編集:Category.FORMATのロケールは「古い」ロケール(de_CH)です。 Category.DISPLAYのロケールは、OSの言語(Windowsでは、コントロールパネル>地域と言語>キーボードと言語>表示言語で行われます)から言語を取得し、... ?
違うように見えるのは、プロパティ "ser.country"です。 Java6では「CH」、Java7では「US」になります。
これは設計どおりです。 Java 7はLocale.getDefault()
の動作を変更しました。Oracleに欠陥がありましたが、基本的には設計どおりです。
つまり、OSの表示言語を変更する必要があります。リージョンフォーマットのみを変更するだけでは不十分です。
ここでバグレポートをお読みください: Locale.getDefault()はJava SE 7 に対して間違ったロケールを返します
Javaバージョンに応じて、プログラムの開始時に次のようにロケールを設定するのはどうでしょうか。
public class LocaleFormatter {
private static Locale locale;
private LocaleFormatter() {
}
public static Locale setDefaultLocale() {
if (locale == null) {
if (!System.getProperty("Java.version").startsWith("1.7.")) {
locale = Locale.getDefault();
} else {
try {
Class localeClass = Class.forName("Java.util.Locale");
Class categoryClass = Class.forName("Java.util.Locale$Category");
Object format = null;
for (Object constant : categoryClass.getEnumConstants()) {
if (constant.toString().equals("FORMAT")) {
format = constant;
}
}
Method method = localeClass.getMethod("getDefault", categoryClass);
locale = (Locale) method.invoke(Locale.getDefault(), format);
Locale.setDefault(locale);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
return locale;
}
}
これは本当に私にとってバグのように見えます:
public static void main(String[] args) throws FileNotFoundException, IOException {
System.err.println(Locale.getDefault());
}
Java 5またはJava 6でこれを実行すると、「nl_NL」と表示されます。Java7:「en_US」
Windowsのコントロールパネルの[地域と言語のオプション]の設定[場所]を確認します(ドイツ語: "Region und Sprache"、 "Aufenthaltsort")。
あなたが十分に勇気があるなら、あなたは呼び出すことができます:
Locale.setDefault(Locale.getDefault());
これにより、これらのカテゴリの両方にデフォルトのロケールが設定されます
public static synchronized void setDefault(Locale newLocale) {
setDefault(Category.DISPLAY, newLocale);
setDefault(Category.FORMAT, newLocale);
defaultLocale = newLocale;
}
しかし、これはもちろん副作用を引き起こす可能性があります。