我如何设置我的JVM的默认语言环境?

我想为我的JVM设置默认的语言环境fr_CA。 有什么可能的select来做到这一点?

我知道只有一个选项Locale.setDefault()

从Oracle参考资料 :

您的应用程序的默认区域设置有三种确定方式。 首先,除非明确更改默认值,否则Locale.getDefault()方法将返回Java虚拟机(JVM)首次加载时最初确定的区域设置。 也就是说,JVM从主机环境中确定默认的语言环境。 主机环境的语言环境由主机操作系统和在该系统上build立的用户首选项决定。

其次,在某些Java运行时实现中,应用程序用户可以通过设置user.languageuser.countryuser.variant系统属性在命令行上提供此信息来覆盖主机的默认语言环境。

第三,您的应用程序可以调用Locale.setDefault(Locale)方法。 setDefault(Locale aLocale)方法可以让您的应用程序设置一个系统范围(实际上是VM范围)的资源。 使用此方法设置默认语言环境后,对Locale.getDefault()的后续调用将返回新设置的语言环境。

您可以通过JVM参数在命令行上进行设置:

 java -Duser.country=CA -Duser.language=fr ... com.x.Main 

有关更多信息,请参阅国际化:了解Java平台中的语言环境 – 使用语言环境

您可以使用JVM参数

 java -Duser.country=ES -Duser.language=es -Duser.variant=Traditional_WIN 

在这里的答案中,到目前为止,我们find了两种更改JRE语言环境设置的方法:

  • 以编程方式,使用Locale.setDefault() (在我的情况下,这是解决scheme,因为我不想要求用户的任何操作):

     Locale.setDefault(new Locale("pt", "BR")); 
  • 通过JVM的参数:

     java -jar anApp.jar -Duser.language=pt-BR 

但是,作为参考,我想指出的是,在Windows上,还有一种更改JRE使用的语言环境的方法,如以下所述:更改系统范围的语言。

注意 :您必须使用具有pipe理特权的帐户login。

  1. 点击开始>控制面板

  2. Windows 7和Vista:单击时钟,语言和区域> 区域和语言

    Windows XP:双击区域和语言选项图标。

    出现区域和语言选项对话框。

  3. Windows 7:单击pipe理选项卡。

    Windows XP和Vista:单击“ 高级”选项卡。

    (如果没有“高级”选项卡,则说明您没有使用pipe理权限login。)

  4. 在“ 非Unicode程序语言”部分下,从下拉菜单中select所需的语言。

  5. 点击OK

    系统将显示一个对话框,询问是使用现有文件还是从操作系统CD进行安装。 确保您准备好CD。

  6. 按照指导说明安装文件。

  7. 安装完成后重新启动计算机。

当然,在Linux上,JRE还使用系统设置来确定要使用的语言环境,但是将系统范​​围的语言从发行版变更为发行版的说明。

您可以使用以下代码为JAR文件强制执行VM参数:

 import java.io.File; import java.lang.management.ManagementFactory; import java.lang.management.RuntimeMXBean; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.List; public class JVMArgumentEnforcer { private String argument; public JVMArgumentEnforcer(String argument) { this.argument = argument; } public static long getTotalPhysicalMemory() { com.sun.management.OperatingSystemMXBean bean = (com.sun.management.OperatingSystemMXBean) java.lang.management.ManagementFactory.getOperatingSystemMXBean(); return bean.getTotalPhysicalMemorySize(); } public static boolean isUsing64BitJavaInstallation() { String bitVersion = System.getProperty("sun.arch.data.model"); return bitVersion.equals("64"); } private boolean hasTargetArgument() { RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean(); List<String> inputArguments = runtimeMXBean.getInputArguments(); return inputArguments.contains(argument); } public void forceArgument() throws Exception { if (!hasTargetArgument()) { // This won't work from IDEs if (JARUtilities.isRunningFromJARFile()) { // Supply the desired argument restartApplication(); } else { throw new IllegalStateException("Please supply the VM argument with your IDE: " + argument); } } } private void restartApplication() throws Exception { String javaBinary = getJavaBinaryPath(); ArrayList<String> command = new ArrayList<>(); command.add(javaBinary); command.add("-jar"); command.add(argument); String currentJARFilePath = JARUtilities.getCurrentJARFilePath(); command.add(currentJARFilePath); ProcessBuilder processBuilder = new ProcessBuilder(command); processBuilder.start(); // Kill the current process System.exit(0); } private String getJavaBinaryPath() { return System.getProperty("java.home") + File.separator + "bin" + File.separator + "java"; } public static class JARUtilities { static boolean isRunningFromJARFile() throws URISyntaxException { File currentJarFile = getCurrentJARFile(); return currentJarFile.getName().endsWith(".jar"); } static String getCurrentJARFilePath() throws URISyntaxException { File currentJarFile = getCurrentJARFile(); return currentJarFile.getPath(); } private static File getCurrentJARFile() throws URISyntaxException { return new File(JVMArgumentEnforcer.class.getProtectionDomain().getCodeSource().getLocation().toURI()); } } } 

它使用如下:

 JVMArgumentEnforcer jvmArgumentEnforcer = new JVMArgumentEnforcer("-Duser.language=pt-BR"); // For example jvmArgumentEnforcer.forceArgument();