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
답변
JVM 인수를 사용할 수 있습니다
java -Duser.country=ES -Duser.language=es -Duser.variant=Traditional_WIN
답변
여기에 대한 답변에서 지금까지 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는 시스템 설정을 사용하여 사용할 로케일을 결정하지만 시스템 전체 언어 변경을 배포판에서 배포판으로 설정하는 지침을 제공합니다.
답변
시스템 로케일을 변경하지 않고 JVM을 변경하려는 경우 다른 방법이 있습니다. 시스템 (또는 사용자) 환경 변수 JAVA_TOOL_OPTIONS
를 설정하고 해당 값 -Duser.language=en-US
또는 원하는 다른 언어-지역을 설정할 수 있습니다.
답변
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();