как установить языковой стандарт по умолчанию для моей JVM?

Я хочу установить стандартную локаль для моей JVM в fr_CA. Каковы возможные варианты для этого?

Я знаю только один вариант Locale.setDefault()

5 Solutions collect form web for “как установить языковой стандарт по умолчанию для моей JVM?”

Из справочника Oracle :

Стандартная локализация вашего приложения определяется тремя способами. Во-первых, если вы явно не изменили значение по умолчанию, метод Locale.getDefault() возвращает локаль, которая была первоначально определена виртуальной машиной Java (JVM) при ее первой загрузке. То есть, JVM определяет локаль по умолчанию из среды хоста. Локаль среды хоста определяется операционной системой хоста и пользовательскими настройками, установленными в этой системе.

Во-вторых, в некоторых реализациях исполнения Java, пользователь приложения может переопределить локальный стандарт хоста, предоставив эту информацию в командной строке, установив свойства системы user.language , user.country и user.variant .

В-третьих, ваше приложение может вызвать метод Locale.setDefault(Locale) . Метод setDefault (Locale aLocale) позволяет вашему приложению устанавливать системный (фактически виртуальный) ресурс. После того, как вы установили локаль по умолчанию с помощью этого метода, последующие вызовы 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, как описано здесь : изменение общесистемного языка.

Примечание . Вы должны войти в систему с учетной записью, имеющей административные привилегии.

  1. Нажмите « Пуск»> «Панель управления» .

  2. Windows 7 и Vista: выберите Часы, язык и регион> Регион и язык .

    Windows XP: дважды щелкните значок « Язык и региональные стандарты» .

    Откроется диалоговое окно « Язык и региональные стандарты» .

  3. Windows 7: перейдите на вкладку « Администратор ».

    Windows XP и Vista: перейдите на вкладку « Дополнительно ».

    (Если вкладка «Дополнительно» отсутствует, то вы не вошли в систему с правами администратора).

  4. В разделе « Язык для не-Юникод » выберите нужный язык в раскрывающемся меню.

  5. Нажмите « ОК» .

    Система отображает диалоговое окно с вопросом, следует ли использовать существующие файлы или устанавливать с компакт-диска с операционной системой. Убедитесь, что компакт-диск готов.

  6. Для установки файлов следуйте инструкциям руководства.

  7. Перезагрузите компьютер после завершения установки.

Разумеется, в 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 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 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(); 
Давайте будем гением компьютера.