设置Java语言环境

40

当我在Linux机器上使用默认的Java区域设置时,它会显示美国区域设置,我该在哪里更改以获取正确的区域设置?


Locale.getavailablelocale() 方法没有返回 en_MY,为什么?它返回了 155 个语言环境。 - VedantK
@kekan:尝试使用Locale.getDefault(); - Michael Fayad
请注意Java 7默认语言环境更改 - Vadzim
可能是如何为我的JVM设置默认语言环境?的重复问题。 - Vadzim
10个回答

51
使用 user.languageuser.countryuser.variant 属性。
示例: java -Duser.language=th -Duser.country=TH -Duser.variant=TH SomeClass

2
这样做可以工作,但更安全、更具未来性的方法是设置环境并让JRE为其找到正确的值。 - Air
问题在于它无法工作@Air...我的Mac JDK环境无法将任何系统环境变量连接到区域设置...只能使用props(JVM属性)... - czupe

30

我必须在运行于法语环境的机器上运行脚本,但特定的Java程序必须以en_US运行。正如已经指出的那样,以下代码可以实现:

java -Duser.language=en -Duser.country=US ...

或者,

LC_ALL=en_US.UTF-8 java ...

我更喜欢后者。


17

如果您想检查Java正在使用的语言环境或字符集,这是内置在JVM中的:

java -XshowSettings -version

而且它会输出许多它正在使用的设置。 这样,您可以检查是否正确拾取了您的LANGLC_*值。


这让我想到了“默认语言环境”、“默认显示语言环境”和“默认格式语言环境”...但是它们之间有什么区别呢? - Nyerguds
1
非常棒的技巧!谢谢你分享!当你使用没有 shell 只有 Java 命令的 distroless 容器时,它非常有用。 - daitangio

15

我相信Java可以从启动它的环境变量中获取这些信息,因此您需要确保适当设置LANG和LC_*环境变量。

man页面上有关于这些环境变量的完整信息。


LC_* 环境变量是什么? - Leonel
如果你的程序需要格式化数字,你可能需要设置LC_ALL。请参见下面的答案。 - cayhorstmann
1
请注意,这是不完整的。我正在运行macOS Sierra,并将LANG以及LC_ALL设置为"en_US.UTF8"。然而,由于某种原因,Java会出现'user.language=en'、'user.country=US'和'user.country.format=DE'的情况。 - Gunnar

13

您可以在init期间或其他任何时候调用Locale.setDefault()方法,或者在命令行中使用-Duser.language=、-Duser.country=和-Duser.variant=。这里是Sun网站上的一些内容


2
支持的语言列表请参见http://www.oracle.com/technetwork/java/javase/locales-137662.html#translation - koppor

12

对于像jarsigner这样的工具,它是用Java实现的。

JAVA_TOOL_OPTIONS=-Duser.language=en jarsigner

2
这个环境更好,只需在您的 ~/.profile 中添加 export JAVA_TOOL_OPTIONS=-Duser.language=en 即可。 - Jiejing Zhang
请参见https://dev59.com/114c5IYBdhLWcg3wFm44。 - Vadzim
最终,这是我想要的选项!java和javac似乎不遵守LANG和LC_ALL。 - Yongwei Wu

3

您可以在控制台上进行更改:

$ export LANG=en_US.utf8

2
首先,您需要将“utf8”更改为“utf-8”。其次,只有编码部分起作用,但语言部分不起作用。 - Yongwei Wu

2
如果您使用的是Mac电脑,只需在“系统偏好设置”中将所需语言拖到列表顶部(在英语之前),即可确保下次打开该应用程序时会尝试使用正确的语言环境!

1
在Linux上,创建文件 /etc/default/locale,并按照以下内容填写。
LANG=en.utf8

然后使用 source 命令运行以导出此变量。

source /etc/default/locale

source 命令永久设置变量。


0

控制区域设置的一种方法是设置Java系统属性user.language和user.region。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接