web-dev-qa-db-ja.com

Locale.getDefault()は常にenを返します

UNIXマシン上のサーバーは、常にデフォルトロケールとしてenを使用しています。以下はロケール出力です

 LANG=en_US
 LC_CTYPE="C"
 LC_NUMERIC="C"
 LC_TIME="C"
 LC_COLLATE="C"
 LC_MONETARY="C"
 LC_MESSAGES="C"
 LC_ALL=C

LANGが正しく設定されているかどうか、サーバーがenロケールで起動する理由がわかりません。

11
Delta

Linux/Unix/Macでは、設定_LC_ALL_およびLANGは、Javaプログラムのデフォルトロケールを制御できます。Windowsでは、ロケールはコントロールパネルから設定されます。 、[地域と言語のオプション]の下。

JVMが* nix環境で起動すると、次のようになります。

  • 環境をスキャンして_LC_ALL_を探します
  • _LC_ALL_が存在しない場合は、環境をスキャンしてLANGを探します。
  • JVM設定_user.language_が設定されている場合は、環境変数の代わりにそれを使用します。
  • 何も設定されていない場合、デフォルトは_en_US_になります(これが最後の失敗ケースだと思います)

ご使用の環境では、_LC_ALL_をCに設定しています。これは、Cロケールにすぎません。これは基本的に、ロケールが使用されなかった時代への伝統的なフォールバックです。

場合によっては_LC_ALL_を変更し、JVMを再起動すると、Java.util.Locale.getDefault()の新しい値を取得する必要があります。

例:

_import Java.util.Locale;

public class LocaleTest {
   public static void main(String[] args) {
      System.out.println(Locale.getDefault());
   }
}
_

実行中:

_> LC_ALL=en_UK Java LocaleTest
en_UK

> LC_ALL=ja_JP Java LocaleTest
ja_JP
_

また、Java 1.7.0-b147を実行している場合、JREがロケールの環境設定を認識せず、常にデフォルトのシステムロケールを使用するというバグがあることに注意してください。

ここでのバグレポート: http://bugs.Sun.com/bugdatabase/view_bug.do?bug_id=7073906

24
wkl