Comment définir les paramètres régionaux par défaut dans la JVM?

Réponses:

156

À partir de la référence Oracle :

Les paramètres régionaux par défaut de votre application sont déterminés de trois manières. Tout d'abord, sauf si vous avez explicitement modifié la valeur par défaut, la Locale.getDefault()méthode renvoie les paramètres régionaux initialement déterminés par la machine virtuelle Java (JVM) lors de son premier chargement. Autrement dit, la JVM détermine les paramètres régionaux par défaut à partir de l'environnement hôte. Les paramètres régionaux de l'environnement hôte sont déterminés par le système d'exploitation hôte et les préférences utilisateur établies sur ce système.

En second lieu , sur certaines implémentations d'exécution Java, l'utilisateur de l' application peut remplacer les paramètres régionaux par défaut de l'hôte en fournissant ces informations sur la ligne de commande en réglant le user.language, user.countryet user.variant les propriétés du système.

Troisièmement, votre application peut appeler la Locale.setDefault(Locale) méthode. La méthode setDefault (Locale aLocale) permet à votre application de définir une ressource à l'échelle du système (en fait à l'échelle de la VM) . Après avoir défini les paramètres régionaux par défaut avec cette méthode, les appels suivants à Locale.getDefault () renverront les paramètres régionaux nouvellement définis.

aleroot
la source
est leur conflit lors de la récupération des mêmes paramètres régionaux à partir de ResourceBundle. J'ai essayé de récupérer le bundle mais j'ai eu ce que j'avais au départ
Navdeep Singh
153

Vous pouvez le définir sur la ligne de commande via les paramètres JVM:

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

Pour plus d'informations, consultez Internationalization: Understanding Locale in the Java Platform - Using Locale

lucasmo
la source
8
Vous pouvez également le définir via la variable d'environnement _JAVA_OPTIONS.
Jeff Paquette
2
Via Java 7 par défaut :setx _JAVA_OPTIONS -Dsun.locale.formatasdefault=true /m
Vadzim
43

Vous pouvez utiliser des arguments JVM

java -Duser.country=ES -Duser.language=es -Duser.variant=Traditional_WIN
Aravind Yarram
la source
29

Dans les réponses ici, jusqu'à présent, nous trouvons deux façons de modifier le paramètre de locale JRE:

  • Par programme, en utilisant Locale.setDefault () (qui, dans mon cas, était la solution, puisque je ne voulais exiger aucune action de l'utilisateur):

    Locale.setDefault(new Locale("pt", "BR"));
  • Via des arguments à la JVM:

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

Mais, juste à titre de référence, je tiens à noter que, sous Windows, il existe un autre moyen de modifier les paramètres régionaux utilisés par le JRE, comme documenté ici : changer la langue du système.

Remarque : vous devez être connecté avec un compte doté de privilèges administratifs.

  1. Cliquez sur Démarrer> Panneau de configuration .

  2. Windows 7 et Vista: cliquez sur Horloge, langue et région> Région et langue .

    Windows XP: double-cliquez sur l' icône Options régionales et linguistiques .

    La boîte de dialogue Options régionales et linguistiques s'affiche.

  3. Windows 7: cliquez sur l' onglet Administration .

    Windows XP et Vista: cliquez sur l' onglet Avancé .

    (S'il n'y a pas d'onglet Avancé, vous n'êtes pas connecté avec des privilèges administratifs.)

  4. Dans la section Langue pour les programmes non Unicode , sélectionnez la langue souhaitée dans le menu déroulant.

  5. Cliquez OK .

    Le système affiche une boîte de dialogue demandant s'il faut utiliser les fichiers existants ou installer à partir du CD du système d'exploitation. Assurez-vous que le CD est prêt.

  6. Suivez les instructions guidées pour installer les fichiers.

  7. Redémarrez l'ordinateur une fois l'installation terminée.

Certes, sous Linux, le JRE utilise également les paramètres système pour déterminer les paramètres régionaux à utiliser, mais les instructions pour définir le changement de langue à l'échelle du système d'une distribution à l'autre.

Antonio Vinicius Menezes Medei
la source
2
Bien que ces informations puissent être utiles, je voudrais souligner que ces étapes sont différentes pour chaque système d'exploitation et pour chaque système d'exploitation, vous pourrez peut-être configurer un paramètre régional qui est utilisé à l'échelle du système. Java est conçu pour utiliser ces paramètres régionaux comme paramètres régionaux par défaut chaque fois que nous ne définissons pas explicitement de paramètres régionaux par défaut. Ainsi, les informations de cette réponse concernent la manière de définir les paramètres régionaux par défaut dans Windows et non dans java.
MozenRath
5

Il y en a un autre si vous n'aimez pas changer les paramètres régionaux du système mais la JVM. vous pouvez configurer une variable d'environnement système (ou utilisateur) JAVA_TOOL_OPTIONSet définir sa valeur sur -Duser.language=en-USou sur toute autre langue-REGION de votre choix.

Ryan Ouyang
la source
1

Vous pouvez appliquer des arguments de machine virtuelle pour un JARfichier avec le code suivant:

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

Il est utilisé comme suit:

JVMArgumentEnforcer jvmArgumentEnforcer = new JVMArgumentEnforcer("-Duser.language=pt-BR"); // For example
jvmArgumentEnforcer.forceArgument();
BullyWiiPlaza
la source
1

Tu peux le faire:

entrez la description de l'image ici

entrez la description de l'image ici

Et pour capturer les paramètres régionaux. Tu peux le faire:

private static final String LOCALE = LocaleContextHolder.getLocale().getLanguage()
            + "-" + LocaleContextHolder.getLocale().getCountry();
Nick Borges
la source