如何在JVM中设置默认语言环境?


Answers:


156

Oracle参考

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

其次,一些Java运行时实现中,应用用户可以通过设置提供的命令行信息覆盖主机的默认语言环境user.languageuser.country以及 user.variant系统性能。

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


从ResourceBundle获取相同语言环境时,它们有任何冲突。我试图拿起捆绑包,但是得到了最初的东西
Navdeep Singh



29

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

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

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

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

但是,只是作为参考,我想需要注意的是,在Windows上,有改变由JRE使用的语言环境的另一种方式,如记录在这里:改变全系统的语言。

注意:您必须使用具有管理权限的帐户登录。

  1. 单击开始>控制面板

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

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

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

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

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

    (如果没有“高级”选项卡,则您没有使用管理特权登录。)

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

  5. 单击确定

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

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

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

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


2
尽管此信息可能会有所帮助,但我想强调一下,每个操作系统的这些步骤是不同的,对于每个操作系统,您可能可以设置在整个系统范围内使用的语言环境。Java被设计为只要我们未明确设置默认语言环境就可以将该语言环境用作默认语言环境。因此,此答案中的信息是关于如何在Windows中而不是在Java中设置默认语言环境的。
MozenRath

5

如果您不想更改系统区域设置,但可以更改JVM,那么还有另一件事。您可以设置系统(或用户)环境变量JAVA_TOOL_OPTIONS并将其值设置为-Duser.language=en-US或所需的任何其他语言区域。


1

您可以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();

1

你可以这样做:

在此处输入图片说明

在此处输入图片说明

并捕获语言环境。你可以这样做:

private static final String LOCALE = LocaleContextHolder.getLocale().getLanguage()
            + "-" + LocaleContextHolder.getLocale().getCountry();
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.