Як встановити локальний код за замовчуванням у JVM?


147

Я хочу встановити за замовчуванням Localeдля мого JVM значенняfr_CA . Які можливі варіанти для цього?

Я знаю лише один варіант Locale.setDefault()



Відповіді:


156

З довідки Oracle :

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

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

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


це їх будь-який конфлікт під час отримання однієї локалі з ResourceBundle. Я спробував отримати пакет, але я отримав те, що мав спочатку
Navdeep Singh

153

Ви можете встановити його в командному рядку за допомогою параметрів JVM:

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

Для отримання додаткової інформації дивіться інтернаціоналізацію: Розуміння місцевого розташування на платформі Java - Використання локальної програми


8
Ви також можете встановити його за допомогою змінної середовища _JAVA_OPTIONS.
Джефф Пакетт

2
Через setx _JAVA_OPTIONS -Dsun.locale.formatasdefault=true /m
локальну локальність


29

У відповідях тут, до цих пір, ми знаходимо два способи зміни налаштування мови JRE:

  • Програматично, використовуючи Locale.setDefault () (що, в моєму випадку, було рішенням, оскільки я не хотів вимагати жодних дій користувача):

    Locale.setDefault(new Locale("pt", "BR"));
  • Через аргументи до СВМ:

    java -jar anApp.jar -Duser.language=pt-BR

Але, в якості довідки, я хочу зазначити, що в Windows існує ще один спосіб зміни локалі, використовуваний JRE, як це зафіксовано тут : зміна загальносистемної мови.

Примітка . Ви повинні увійти в обліковий запис, який має права адміністратора.

  1. Клацніть Пуск> Панель управління .

  2. Windows 7 та Vista: Клацніть годинник, мова та регіон> регіон та мова .

    Windows XP: Двічі клацніть піктограму Регіональні та мовні параметри .

    З'явиться діалогове вікно " Регіональні та мовні параметри ".

  3. Windows 7: Перейдіть на вкладку Адміністратор .

    Windows XP та Vista: Перейдіть на вкладку Додатково .

    (Якщо немає вкладки "Розширений", ви не входите в систему з адміністративними привілеями.)

  4. У розділі Мова для програм, що не стосуються Unicode , виберіть потрібну мову зі спадного меню.

  5. Натисніть кнопку ОК .

    Система відображає діалогове вікно із запитом, чи потрібно використовувати існуючі файли чи встановлювати з компакт-диска операційної системи. Переконайтеся, що у вас готовий компакт-диск.

  6. Дотримуйтесь вказівок, щоб встановити файли.

  7. Перезавантажте комп'ютер після завершення встановлення.

Безумовно, в Linux JRE також використовує системні налаштування, щоб визначити, яку локальну мову використовувати, але вказівки для встановлення зміни загальносистемної мови з дистрибутивної на дистрибутивну.


2
хоча ця інформація може бути корисною, я хотів би підкреслити, що ці кроки є різними для кожної ОС і для кожної ОС, можливо, ви зможете налаштувати Локальний канал, який використовується для системи. Java призначена для використання цього мовлення як мови за замовчуванням, коли ми явно не встановлюємо локаль за замовчуванням. Отже, інформація у цій відповіді стосується того, як встановити локальний код за замовчуванням у Windows, а не в Java.
MozenRath

5

Є ще одне, якщо вам не подобається міняти локальну систему, а лише JVM. Ви можете встановити змінну середовища (або користувача) середовища JAVA_TOOL_OPTIONSта встановити її значення на -Duser.language=en-USбудь-якій іншій мові - РЕГІОН, яку ви хочете.


1

Ви можете застосувати аргументи 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();

1

Ви можете зробити це:

введіть тут опис зображення

введіть тут опис зображення

І захопити локаль. Ви можете зробити це:

private static final String LOCALE = LocaleContextHolder.getLocale().getLanguage()
            + "-" + LocaleContextHolder.getLocale().getCountry();
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.