Comment définir les parameters régionaux par défaut pour ma JVM?

Je veux définir les parameters régionaux par défaut pour ma JVM à fr_CA. Quelles sont les options possibles pour ce faire?

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

De la référence Oracle :

Les parameters régionaux par défaut de votre application sont déterminés de trois manières. Tout d’abord, à moins que vous n’ayez modifié explicitement la valeur par défaut, la méthode Locale.getDefault() renvoie les parameters régionaux initialement déterminés par la machine virtuelle Java (JVM) lors de son premier chargement. En d’autres termes, la machine virtuelle Java détermine les parameters régionaux par défaut à partir de l’environnement hôte. Les parameters 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.

Deuxièmement, sur certaines implémentations d’exécution Java, l’utilisateur de l’application peut remplacer les parameters 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 Locale.setDefault(Locale) . 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 parameters régionaux par défaut avec cette méthode, les appels suivants à Locale.getDefault () renverront les parameters régionaux nouvellement définis.

Vous pouvez le définir sur la ligne de commande via les parameters JVM:

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

Pour plus d’informations sur l’ internationalisation: Comprendre les parameters régionaux dans la plate-forme Java – Utilisation des parameters régionaux

Vous pouvez utiliser des arguments JVM

 java -Duser.country=ES -Duser.language=es -Duser.variant=Traditional_WIN 

Dans les réponses ici, jusqu’à présent, nous trouvons deux manières de modifier le paramètre régional JRE:

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

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

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

Mais, à titre de référence, je tiens à noter que, sous Windows, il existe un autre moyen de modifier les parameters régionaux utilisés par JRE, comme indiqué ici : modifier 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 dialog 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 d’administrateur.)

  4. Dans 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 dialog vous demandant si vous souhaitez utiliser les fichiers existants ou les 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.

Sous Linux, il est clair que JRE utilise également les parameters du système pour déterminer les parameters régionaux à utiliser, mais les instructions permettant de définir la langue à l’échelle du système de distro à distro.

Vous pouvez appliquer des 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 Ssortingng argument; public JVMArgumentEnforcer(Ssortingng 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() { Ssortingng 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 { Ssortingng 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()); } } } 

Il est utilisé comme suit:

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