Locale.getDefault()始终返回en

Del*_*lta 11 java unix linux locale

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
Run Code Online (Sandbox Code Playgroud)

我只是不明白LANG是否设置正确然后为什么服务器以en locale开头.

wkl*_*wkl 24

在Linux/Unix/Mac中,设置LC_ALLLANG可以控制Java程序的默认语言环境.在Windows中,语言环境是通过"控制面板"在"区域和语言选项"下设置的.

当JVM在*nix环境中启动时,它将执行以下操作:

  • 扫描环境 LC_ALL
  • 如果LC_ALL不存在,请扫描环境LANG
  • 如果设置了JVM设置user.language,请使用它来代替环境变量.
  • 如果没有设置,默认为en_US(我相信这是最后的失败案例)

在您的环境中,您已LC_ALL设置为C,这只是C语言环境.它基本上是一个传统的回归到没有使用locales的日子.

你可以改变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());
   }
}
Run Code Online (Sandbox Code Playgroud)

这是在运行:

> LC_ALL=en_UK java LocaleTest
en_UK

> LC_ALL=ja_JP java LocaleTest
ja_JP
Run Code Online (Sandbox Code Playgroud)

另请注意,如果您运行的是Java 1.7.0-b147,则JRE无法识别区域设置的环境设置,并且始终使用默认的系统区域设置.

错误报告:http://bugs.sun.com/bugdatabase/view_bug.do?video_id = 7073906