Je souhaite définir la valeur Locale
par défaut de ma JVM surfr_CA
. Quelles sont les options possibles pour ce faire?
Je ne connais qu'une seule option Locale.setDefault()
Je souhaite définir la valeur Locale
par défaut de ma JVM surfr_CA
. Quelles sont les options possibles pour ce faire?
Je ne connais qu'une seule option Locale.setDefault()
Réponses:
À 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.country
etuser.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.
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
setx _JAVA_OPTIONS -Dsun.locale.formatasdefault=true /m
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 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.
Cliquez sur Démarrer> Panneau de configuration .
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.
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.)
Dans la section Langue pour les programmes non Unicode , sélectionnez la langue souhaitée dans le menu déroulant.
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.
Suivez les instructions guidées pour installer les fichiers.
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.
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_OPTIONS
et définir sa valeur sur -Duser.language=en-US
ou sur toute autre langue-REGION de votre choix.
Vous pouvez appliquer des arguments de machine virtuelle pour un JAR
fichier 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();
Tu peux le faire:
Et pour capturer les paramètres régionaux. Tu peux le faire:
private static final String LOCALE = LocaleContextHolder.getLocale().getLanguage()
+ "-" + LocaleContextHolder.getLocale().getCountry();