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



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



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

762   5  

5 ответов:

С Ссылка На Oracle:

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

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

в-третьих, ваше приложение может вызвать Locale.setDefault(Locale) метод. Метод setDefault (Locale aLocale) позволяет вашему приложению набор системной (на самом деле VM-wide) ресурс. После установки языкового стандарта по умолчанию с этим метод, последующие вызовы локали.getDefault() возвращает вновь установите локаль.

вы можете установить его в командной строке с помощью параметров JVM:

java -Duser.country=CA -Duser.language=fr ... com.x.Main

для получения дополнительной информации посмотрите на интернационализация: понимание локали в платформе Java - использование локали

вы можете использовать JVM args

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: дважды щелкните региональные и языковые параметры икона.

    The региональные и языковые параметры появится диалоговое окно.

  3. Windows 7: Нажмите административные tab.

    Windows XP и Vista: Нажмите кнопку Advanced tab.

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

  4. под язык для программ, отличных от Unicode выберите нужный язык из выпадающего меню.

  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<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();

Comments

    Ничего не найдено.