12

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 localeで始まる理由がわかりません。

4

1 に答える 1

27

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

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

于 2012-05-22T18:22:33.940 に答える