JVM에서 기본 로케일을 어떻게 설정합니까?


답변:


156

로부터 Oracle 참조 :

응용 프로그램의 기본 로캘은 세 가지 방법으로 결정됩니다. 먼저, 기본값을 명시 적으로 변경하지 않은 경우, Locale.getDefault()메소드는 JVM (Java Virtual Machine)이 처음로드 될 때 처음 결정된 로케일을 리턴합니다. 즉, JVM은 호스트 환경에서 기본 로케일을 결정합니다. 호스트 환경의 로케일은 호스트 운영 체제 및 해당 시스템에 설정된 사용자 기본 설정에 따라 결정됩니다.

둘째, 일부 Java 런타임의 구현에, 응용 프로그램 사용자가 설정하여 명령 행에서이 정보를 제공하여 호스트의 기본 로케일을 재정의 할 수 있습니다 user.language, user.country및 user.variant시스템 특성을.

셋째, 응용 프로그램이 Locale.setDefault(Locale) 메서드를 호출 할 수 있습니다 . setDefault (Locale aLocale) 메서드를 사용하면 응용 프로그램에서 시스템 전체 (실제 VM 전체) 리소스를 설정할 수 있습니다 . 이 메소드로 기본 로케일을 설정 한 후, Locale.getDefault ()에 대한 후속 호출은 새로 설정된 로케일을 리턴합니다.


ResourceBundle에서 동일한 로케일을 가져 오는 동안 충돌이 발생합니다. 번들을 가져 오려고했지만 처음에 가지고 있던 것을 얻었습니다
— Navdeep Singh


43

JVM 인수를 사용할 수 있습니다

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

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. 세 이하 유니 코드를 지원하지 않는 프로그램의 언어 섹션의 드롭 다운 메뉴에서 원하는 언어를 선택합니다.

  5. 확인을 클릭하십시오 .

    시스템은 기존 파일을 사용할지 또는 운영 체제 CD에서 설치 할지를 묻는 대화 상자를 표시합니다. CD가 준비되어 있는지 확인하십시오.

  6. 안내에 따라 파일을 설치하십시오.

  7. 설치가 완료된 후 컴퓨터를 다시 시작하십시오.

확실히 Linux에서 JRE는 시스템 설정을 사용하여 사용할 로케일을 결정하지만 시스템 전체 언어 변경을 배포판에서 배포판으로 설정하는 지침을 제공합니다.


2
이 정보가 도움이 될 수 있지만이 단계가 각 OS 및 OS마다 다르므로 시스템 전체에서 사용되는 로캘을 설정할 수 있다는 점을 강조하고 싶습니다. Java는 기본 로캘을 명시 적으로 설정하지 않을 때마다 해당 로캘을 기본 로캘로 사용하도록 설계되었습니다. 따라서이 답변의 정보는 Java가 아닌 Windows에서 기본 로캘을 설정하는 방법에 대한 것입니다.
— 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();
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.