2012-05-22 40 views
11

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が正しく設定されている場合、私は理解していないです。

+0

jvmを再起動しましたか? –

答えて

22

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

JVMは、* nixの環境で起動すると、それはこれを行います。

  • LC_ALLが存在しない場合は場合LANG
  • ための環境をスキャンし、LC_ALL
  • のための環境をスキャンJVM設定user.languageが設定されている場合は、環境変数の代わりにそれを使用します。
  • 何も設定されていない場合は、en_USにデフォルト(私はこれが最終的な障害の場合であると信じて)自分の環境では

、あなただけのCロケールでCLC_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

+0

ありがとうbirryree。しかし、getDefaultメソッドはuser.languageプロパティに基づいてLocaleを返します。このようなサーバーを実行しているときにこれらのプロパティーが明示的に渡されない場合、-Duser.language = en_GBこれらの値はどのように設定されますか?ユーザーがシステムにログインするときにこれらのプロパティーが取得されるか、環境に基づいてこれらのプロパティーがjvmによって設定されます。 – Delta

+0

@Delta - 私が言及したように、あなたのローカル環境を見て、JVMの起動時にロケールに 'LC_ALL'または' LANG'変数を使います。何も設定されていなければ、デフォルトでハードコーディングされた値( 'en_US')が設定されます。ありがとうbirreyree。 – birryree

+0

私はこの変更を行い、正しく動作するかどうかを確認します。ありがとう – Delta

関連する問題