Voglio impostare il valore predefinito Locale
per la mia JVM su fr_CA
. Quali sono le possibili opzioni per farlo?
Conosco solo un'opzione Locale.setDefault()
Voglio impostare il valore predefinito Locale
per la mia JVM su fr_CA
. Quali sono le possibili opzioni per farlo?
Conosco solo un'opzione Locale.setDefault()
Risposte:
Dal riferimento Oracle :
Le impostazioni internazionali predefinite dell'applicazione sono determinate in tre modi. Innanzitutto, a meno che non sia stata esplicitamente modificata l'impostazione predefinita, il
Locale.getDefault()
metodo restituisce le impostazioni locali inizialmente determinate dalla Java Virtual Machine (JVM) al primo caricamento. Cioè, JVM determina le impostazioni internazionali predefinite dall'ambiente host. Le impostazioni internazionali dell'ambiente host sono determinate dal sistema operativo host e dalle preferenze dell'utente stabilite su quel sistema.In secondo luogo, in alcune implementazioni di runtime di Java, l'utente dell'applicazione può sovrascrivere internazionale predefinita del padrone di casa, fornendo le informazioni sulla riga di comando impostando la
user.language
,user.country
euser.variant
le proprietà del sistema.In terzo luogo, l'applicazione può chiamare il
Locale.setDefault(Locale)
metodo. Il metodo setDefault (Locale aLocale) consente all'applicazione di impostare una risorsa a livello di sistema (in realtà a livello di VM) . Dopo aver impostato le impostazioni internazionali predefinite con questo metodo, le chiamate successive a Locale.getDefault () restituiranno le impostazioni internazionali appena impostate.
Puoi impostarlo sulla riga di comando tramite i parametri JVM:
java -Duser.country=CA -Duser.language=fr ... com.x.Main
Per ulteriori informazioni, consultare Internazionalizzazione: comprensione delle impostazioni internazionali nella piattaforma Java - Utilizzo delle impostazioni locali
setx _JAVA_OPTIONS -Dsun.locale.formatasdefault=true /m
Puoi usare gli arg di JVM
java -Duser.country=ES -Duser.language=es -Duser.variant=Traditional_WIN
Nelle risposte qui, fino ad ora, troviamo due modi per modificare le impostazioni internazionali di JRE:
A livello di programmazione, usando Locale.setDefault () (che, nel mio caso, era la soluzione, poiché non volevo richiedere alcuna azione dell'utente):
Locale.setDefault(new Locale("pt", "BR"));
Tramite argomenti alla JVM:
java -jar anApp.jar -Duser.language=pt-BR
Ma, come riferimento, voglio notare che, su Windows, c'è un altro modo per cambiare le impostazioni locali utilizzate da JRE, come documentato qui : cambiare la lingua dell'intero sistema.
Nota : è necessario aver effettuato l'accesso con un account con privilegi di amministratore.
Fai clic su Start> Pannello di controllo .
Windows 7 e Vista: fai clic su Orologio, Lingua e regione> Regione e lingua .
Windows XP: fare doppio clic sull'icona Opzioni internazionali e della lingua .
L'internazionali e della lingua di dialogo visualizzata la casella.
Windows 7: fare clic su Amministratore scheda .
Windows XP e Vista: fare clic su Avanzate scheda .
(Se non è presente alcuna scheda Avanzate, non si è effettuato l'accesso con privilegi di amministratore.)
Nella sezione Lingua per programmi non Unicode , seleziona la lingua desiderata dal menu a discesa.
Clicca OK .
Il sistema visualizza una finestra di dialogo che chiede se utilizzare i file esistenti o installare dal CD del sistema operativo. Assicurarsi che il CD sia pronto.
Seguire le istruzioni guidate per installare i file.
Riavvia il computer al termine dell'installazione.
Certamente su Linux JRE utilizza anche le impostazioni di sistema per determinare quale locale utilizzare, ma le istruzioni per impostare la lingua a livello di sistema cambiano da distro a distro.
Ce n'è un altro se non ti piace cambiare le impostazioni locali del sistema ma la JVM. è possibile impostare una variabile di ambiente di sistema (o utente) JAVA_TOOL_OPTIONS
e impostarne il valore -Duser.language=en-US
o qualsiasi altra lingua-REGION desiderata.
È possibile applicare argomenti VM per un JAR
file con il seguente codice:
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());
}
}
}
È usato come segue:
JVMArgumentEnforcer jvmArgumentEnforcer = new JVMArgumentEnforcer("-Duser.language=pt-BR"); // For example
jvmArgumentEnforcer.forceArgument();
Puoi farlo:
E per acquisire impostazioni internazionali. Puoi farlo:
private static final String LOCALE = LocaleContextHolder.getLocale().getLanguage()
+ "-" + LocaleContextHolder.getLocale().getCountry();