Locale
내 JVM 의 기본값 을 로 설정하고 싶습니다 fr_CA
. 가능한 옵션은 무엇입니까?
하나의 옵션 만 알고 있습니다 Locale.setDefault()
Locale
내 JVM 의 기본값 을 로 설정하고 싶습니다 fr_CA
. 가능한 옵션은 무엇입니까?
하나의 옵션 만 알고 있습니다 Locale.setDefault()
답변:
로부터 Oracle 참조 :
응용 프로그램의 기본 로캘은 세 가지 방법으로 결정됩니다. 먼저, 기본값을 명시 적으로 변경하지 않은 경우,
Locale.getDefault()
메소드는 JVM (Java Virtual Machine)이 처음로드 될 때 처음 결정된 로케일을 리턴합니다. 즉, JVM은 호스트 환경에서 기본 로케일을 결정합니다. 호스트 환경의 로케일은 호스트 운영 체제 및 해당 시스템에 설정된 사용자 기본 설정에 따라 결정됩니다.둘째, 일부 Java 런타임의 구현에, 응용 프로그램 사용자가 설정하여 명령 행에서이 정보를 제공하여 호스트의 기본 로케일을 재정의 할 수 있습니다
user.language
,user.country
및user.variant
시스템 특성을.셋째, 응용 프로그램이
Locale.setDefault(Locale)
메서드를 호출 할 수 있습니다 . setDefault (Locale aLocale) 메서드를 사용하면 응용 프로그램에서 시스템 전체 (실제 VM 전체) 리소스를 설정할 수 있습니다 . 이 메소드로 기본 로케일을 설정 한 후, Locale.getDefault ()에 대한 후속 호출은 새로 설정된 로케일을 리턴합니다.
JVM 매개 변수를 통해 명령 행에서이를 설정할 수 있습니다.
java -Duser.country=CA -Duser.language=fr ... com.x.Main
setx _JAVA_OPTIONS -Dsun.locale.formatasdefault=true /m
여기에 대한 답변에서 지금까지 JRE 로케일 설정을 변경하는 두 가지 방법이 있습니다.
프로그래밍 방식으로 Locale.setDefault () 사용 (내 경우에는 사용자의 조치가 필요하지 않기 때문에 해결책이었습니다) :
Locale.setDefault(new Locale("pt", "BR"));
JVM에 대한 인수를 통해 :
java -jar anApp.jar -Duser.language=pt-BR
그러나 참고로, Windows에서는 JRE가 사용하는 로캘을 변경하는 또 다른 방법이 있습니다 . 여기 에는 시스템 전체 언어 변경이 있습니다.
참고 : 관리 권한이있는 계정으로 로그인해야합니다.
시작> 제어판을 클릭 하십시오 .
Windows 7 및 Vista : 시계, 언어 및 지역> 지역 및 언어를 클릭하십시오 .
Windows XP : 국가 및 언어 옵션 아이콘을 두 번 클릭하십시오 .
국가 및 언어 옵션 대화 상자가 나타납니다.
Windows 7 : 관리 탭을 클릭 하십시오.
Windows XP 및 Vista : 고급 탭을 클릭 하십시오.
(고급 탭이 없으면 관리자 권한으로 로그인하지 않은 것입니다.)
세 이하 유니 코드를 지원하지 않는 프로그램의 언어 섹션의 드롭 다운 메뉴에서 원하는 언어를 선택합니다.
확인을 클릭하십시오 .
시스템은 기존 파일을 사용할지 또는 운영 체제 CD에서 설치 할지를 묻는 대화 상자를 표시합니다. CD가 준비되어 있는지 확인하십시오.
안내에 따라 파일을 설치하십시오.
설치가 완료된 후 컴퓨터를 다시 시작하십시오.
확실히 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();