JVM에서 기본 로캘을 설정하는 방법
기본값을 설정하려는 경우Locale
내 JVM을 위해fr_CA
이를 위해 가능한 옵션은 무엇인가?
나는 오직 한 가지 선택사항만을 알고 있다.Locale.setDefault()
명령줄에서 JVM 매개 변수를 통해 설정 가능:
java -Duser.country=CA -Duser.language=fr ... com.x.Main
자세한 내용은 국제화를 참조하십시오. Java 플랫폼의 로케일 이해 - 로케일 사용
Oracle 참조 자료:
응용 프로그램의 기본 로케일은 세 가지 방법으로 결정된다.먼저, 기본값을 명시적으로 변경하지 않은 경우 메소드는 처음 로드할 때 Java Virtual Machine(JVM)에 의해 처음에 결정된 로케일을 반환한다.즉, JVM은 호스트 환경에서 기본 로케일을 결정한다.호스트 환경의 로케일은 호스트 운영 체제와 해당 시스템에 설정된 사용자 기본 설정에 의해 결정된다.
둘째, 일부 Java 런타임 구현에서 애플리케이션 사용자는 이 정보를 명령줄에 제공함으로써 호스트의 기본 로캘을 재정의할 수 있다.
user.language
,user.country
그리고user.variant
시스템 속성.셋째, 당신의 어플리케이션은 메소드를 호출할 수 있다.setDefault(Locale aLocale) 방법을 사용하면 애플리케이션에서 시스템 전체(실제 VM 전체) 리소스를 설정할 수 있다.이 방법을 사용하여 기본 로캘을 설정한 후 Local.getDefault()로 이어지는 호출은 새로 설정된 로캘을 반환하십시오.
JVM args를 사용할 수 있음
java -Duser.country=ES -Duser.language=es -Duser.variant=Traditional_WIN
지금까지 나온 답변에서는 JRE 로케일 설정을 변경하는 두 가지 방법을 찾을 수 있다.
프로그래밍 방식으로, 로케일 사용.setDefault() (내 경우에는 사용자의 어떠한 작업도 필요하지 않기 때문에 해결책이었다):
Locale.setDefault(new Locale("pt", "BR"));
JVM에 대한 인수를 통해:
java -jar anApp.jar -Duser.language=pt-BR
참고로, Windows에서 JRE가 사용하는 로케일을 변경할 수 있는 방법이 하나 더 있는데, 바로 여기에 문서화되어 있는 시스템 전체 언어를 변경하는 것이다.
참고: 관리자 권한이 있는 계정으로 로그인해야 함
Start > Control Panel을 클릭한다.
Windows 7 및 Vista: 시계, 언어 및 지역 > 지역 및 언어를 누르십시오.
Windows XP: 국가 및 언어 옵션 아이콘을 두 번 누르십시오.
국가 및 언어 옵션 대화 상자가 나타난다.
Windows 7: 관리 탭을 누르십시오.
Windows XP 및 Vista: 고급 탭을 누르십시오.
(고급 탭이 없는 경우 관리자 권한으로 로그인하지 않은 경우)
유니코드가 아닌 프로그램에 대한 언어 섹션의 드롭다운 메뉴에서 원하는 언어를 선택하십시오.
확인을 누르십시오.
시스템에는 기존 파일을 사용할지 아니면 운영 체제 CD에서 설치할지를 묻는 대화 상자가 표시된다.CD가 준비되어 있는지 확인하십시오.
안내에 따라 파일을 설치하십시오.
설치가 완료된 후 시스템을 재시작하십시오.
확실히 Linux에서 JRE는 사용할 로케일을 결정하기 위해 시스템 설정을 사용하지만, 시스템 전체 언어를 디스트로에서 디스트로로 설정하는 지침은 변경된다.
시스템 로케일을 변경하지 않고 JVM을 변경하려는 경우 다른 방법이 있음. 시스템(또는 사용자) 환경 변수를 설정할 수 있음JAVA_TOOL_OPTIONS
그리고 그 가치를 로 정하다.-Duser.language=en-US
또는 원하는 다른 언어 영역.
다음 작업을 수행하십시오.
그리고 로케일을 캡처하기 위해.다음 작업을 수행하십시오.
private static final String LOCALE = LocaleContextHolder.getLocale().getLanguage()
+ "-" + LocaleContextHolder.getLocale().getCountry();
에 대해 VM 인수를 적용할 수 있음JAR
다음 코드를 사용하여 파일링하십시오.
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();
참조URL: https://stackoverflow.com/questions/8809098/how-do-i-set-the-default-locale-in-the-jvm
'Programing' 카테고리의 다른 글
Java 클라이언트에서 서버의 자체 서명 SSL 인증서 수락 (0) | 2022.04.17 |
---|---|
유닉스 도메인 소켓 VS 명명된 파이프? (0) | 2022.04.17 |
vuej에서 클릭한 버튼에만 로딩을 추가하려면 어떻게 해야 하는가? (0) | 2022.04.17 |
jQuery를 사용하여 Vue.js 양식에서 값 설정 (0) | 2022.04.17 |
v-data-table을 사용 가능한 모든 공간에 수직으로 설치하는 방법 (0) | 2022.04.17 |