【发布时间】:2012-05-22 17:46:24
【问题描述】:
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 开头。
【问题讨论】:
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 开头。
【问题讨论】:
在 Linux/Unix/Mac 中,设置 LC_ALL 和 LANG 可以控制 Java 程序的默认语言环境。在 Windows 中,区域设置是从控制面板的区域和语言选项下设置的。
当 JVM 在 *nix 环境中启动时,它会这样做:
LC_ALL
LC_ALL 不存在,请扫描环境中的LANG
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
【讨论】:
LC_ALL 或 LANG 变量作为语言环境。如果没有设置,它将默认为某个硬编码值 (en_US)。