UNIXマシン上のサーバは、常にデフォルトのロケールとしてenを使用します。続き は、ロケール出力Locale.getDefault()は常に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
サーバは、ロケールENで始まる理由LANGが正しく設定されている場合、私は理解していないです。
UNIXマシン上のサーバは、常にデフォルトのロケールとしてenを使用します。続き は、ロケール出力Locale.getDefault()は常に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
サーバは、ロケールENで始まる理由LANGが正しく設定されている場合、私は理解していないです。
Linux/Unix/Macでは、LC_ALL
とLANG
の設定でJavaプログラムのデフォルトロケールを制御できます。 Windowsでは、ロケールはコントロールパネルの[地域と言語のオプション]で設定します。
JVMは、* nixの環境で起動すると、それはこれを行います。
LC_ALL
が存在しない場合は場合LANG
LC_ALL
user.language
が設定されている場合は、環境変数の代わりにそれを使用します。en_US
にデフォルト(私はこれが最終的な障害の場合であると信じて)自分の環境では、あなただけのCロケールでC
へLC_ALL
セットを持っています。基本的には、ロケールを使用しなかった時代の伝統的なフォールバックです。
あなたのケースで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
ありがとうbirryree。しかし、getDefaultメソッドはuser.languageプロパティに基づいてLocaleを返します。このようなサーバーを実行しているときにこれらのプロパティーが明示的に渡されない場合、-Duser.language = en_GBこれらの値はどのように設定されますか?ユーザーがシステムにログインするときにこれらのプロパティーが取得されるか、環境に基づいてこれらのプロパティーがjvmによって設定されます。 – Delta
@Delta - 私が言及したように、あなたのローカル環境を見て、JVMの起動時にロケールに 'LC_ALL'または' LANG'変数を使います。何も設定されていなければ、デフォルトでハードコーディングされた値( 'en_US')が設定されます。ありがとうbirreyree。 – birryree
私はこの変更を行い、正しく動作するかどうかを確認します。ありがとう – Delta
jvmを再起動しましたか? –