web-dev-qa-db-fra.com

Comment définir les paramètres régionaux par défaut pour ma machine virtuelle Java?

Je souhaite définir les paramètres régionaux par défaut de ma machine virtuelle Java sur fr_CA. Quelles sont les options possibles pour faire cela?

Je ne connais qu'une seule option Locale.setDefault()

134
MozenRath

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. Premièrement, à moins que vous n'ayez explicitement changé la valeur par défaut, la méthode Locale.getDefault() renvoie les paramètres régionaux initialement déterminés par la machine virtuelle JVM (Java) lors de son premier chargement. En d’autres termes, la machine virtuelle Java 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 définies sur ce système.

Deuxièmement, 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 définissant les propriétés système user.language, user.country et user.variant.

Troisièmement, votre application peut appeler la méthode Locale.setDefault(Locale) . La méthode setDefault (Locale aLocale) permet à votre application de définir une ressource système (en fait, au niveau de la machine virtuelle) . Après avoir défini les paramètres régionaux par défaut avec cette méthode, les appels ultérieurs à Locale.getDefault () renverront les paramètres régionaux récemment définis.

143
aleroot

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

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

Pour plus d'informations, consultez Internationalisation: description des paramètres régionaux dans la plate-forme Java - Utilisation des paramètres régionaux

135
lucasmo

Vous pouvez utiliser des arguments JVM

Java -Duser.country=ES -Duser.language=es -Duser.variant=Traditional_WIN
37
Aravind R. Yarram

Jusqu'à présent, dans les réponses, nous trouvons deux façons de modifier les paramètres régionaux JRE:

  • Par programmation, en utilisant Locale.setDefault () (ce qui, dans mon cas, était la solution, étant donné que je ne voulais demander aucune action de l'utilisateur):

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

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

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

Remarque : vous devez être connecté avec un compte disposant 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 apparaît.

  3. Windows 7: Cliquez sur l'onglet Administratif .

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

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

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

  5. Cliquez sur OK.

    Le système affiche une boîte de dialogue vous demandant si vous souhaitez utiliser des fichiers existants ou installer à partir du CD du système d'exploitation. Assurez-vous que vous avez le CD prêt.

  6. Suivez les instructions pour installer les fichiers.

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

Certes, sous Linux, JRE utilise également les paramètres système pour déterminer les paramètres régionaux à utiliser, mais les instructions permettant de définir la langue du système changent de distribution en distribution.

Tu peux le faire:

enter image description here

enter image description here

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

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

Si vous n'aimez pas modifier les paramètres régionaux du système, vous devez en trouver un autre. vous pouvez configurer une variable d'environnement système (ou utilisateur) Java_TOOL_OPTIONS et lui attribuer la valeur -Duser.language=en-US ou à une autre région linguistique souhaitée.

1
Ryan Ouyang

Vous pouvez appliquer les arguments VM pour un fichier JAR 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();
1
BullyWiiPlaza