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


답변:


156

로부터 Oracle 참조 :

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

둘째, 일부 Java 런타임의 구현에, 응용 프로그램 사용자가 설정하여 명령 행에서이 정보를 제공하여 호스트의 기본 로케일을 재정의 할 수 있습니다 user.language, user.countryuser.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.