Я хочу установить значение по умолчанию для моего JVM по умолчанию для fr_CA. Каковы возможные варианты для этого?
Я знаю только один вариант Locale.setDefault()
Я хочу установить значение по умолчанию для моего JVM по умолчанию для fr_CA. Каковы возможные варианты для этого?
Я знаю только один вариант Locale.setDefault()
Стандартная локализация вашего приложения определяется тремя способами. Во-первых, если вы явно не изменили значение по умолчанию,
Locale.getDefault()
возвращает локаль, которая была первоначально определена с помощью виртуальной машины Java (JVM) при ее первой загрузке. Это JVM определяет локаль по умолчанию из среды хоста. Гостья локаль среды определяется операционной системой хоста и пользовательские настройки, установленные в этой системе.Во-вторых, для некоторых реализаций исполнения Java пользователь приложения может переопределите локальный стандарт хоста, указав эту информацию на командной строки, установив
user.language
,user.country
иuser.variant
.В-третьих, ваше приложение может вызвать
Locale.setDefault(Locale)
метод. Метод setDefault (Locale aLocale) позволяет вашему приложению установите системный (фактически VM-wide) ресурс. После того, как вы установили языковой стандарт по умолчанию метод, последующие вызовы Locale.getDefault() вернут установить языковой стандарт.
Вы можете установить его в командной строке с помощью параметров JVM:
java -Duser.country=CA -Duser.language=fr ... com.x.Main
Для получения дополнительной информации см. Интернационализация: понимание языка в платформе Java - использование локали
Вы можете использовать аргументы 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: перейдите на вкладку Дополнительно.
(Если вкладка "Дополнительно" отсутствует, то вы не вошли в систему с административные привилегии.)
В разделе Язык для не-Unicode выберите нужный язык в раскрывающемся меню.
Нажмите ОК.
Система отображает диалоговое окно с вопросом, следует ли использовать существующие файлов или для установки с компакт-диска операционной системы. Убедитесь, что у вас есть компакт-диск готов.
Следуйте инструкциям по установке, чтобы установить файлы.
Перезагрузите компьютер после завершения установки.
Конечно, в Linux JRE также использует системные настройки, чтобы определить, какой язык использовать, но инструкции по изменению общесистемного языка из дистрибутива в дистрибутив.
Вы можете применять аргументы 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();
Вы можете сделать это:
И захватить локаль. Вы можете сделать это:
private static final String LOCALE = LocaleContextHolder.getLocale().getLanguage()
+ "-" + LocaleContextHolder.getLocale().getCountry();
Есть еще один вариант, если вы не хотите менять локаль системы, кроме JVM. Вы можете установить JAVA_TOOL_OPTIONS
(или пользовательскую) переменную среды JAVA_TOOL_OPTIONS
и установить ее значение -Duser.language=en-US
или любой другой язык-REGION, который вы хотите.