Come posso impostare le impostazioni internazionali predefinite nella JVM?


Risposte:


156

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.countrye user.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.


è il loro conflitto durante il recupero della stessa locale da ResourceBundle. Ho cercato di recuperare il pacchetto ma ho ottenuto quello che avevo inizialmente
Navdeep Singh,

153

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


8
Puoi anche impostarlo tramite la variabile d'ambiente _JAVA_OPTIONS.
Jeff Paquette,

2
Tramite le impostazioni internazionali predefinite di Java 7 :setx _JAVA_OPTIONS -Dsun.locale.formatasdefault=true /m
Vadzim,

43

Puoi usare gli arg di JVM

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

29

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.

  1. Fai clic su Start> Pannello di controllo .

  2. 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.

  3. 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.)

  4. Nella sezione Lingua per programmi non Unicode , seleziona la lingua desiderata dal menu a discesa.

  5. 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.

  6. Seguire le istruzioni guidate per installare i file.

  7. 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.


2
sebbene queste informazioni possano essere utili, vorrei evidenziare che questi passaggi sono diversi per ciascun sistema operativo e per ciascun sistema operativo, potresti essere in grado di configurare un Locale che viene utilizzato a livello di sistema. Java è progettato per utilizzare quella locale come locale predefinita ogni volta che non stiamo impostando esplicitamente una locale predefinita. Quindi le informazioni in questa risposta riguardano come impostare le impostazioni internazionali predefinite in Windows e non in Java.
MozenRath,

5

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_OPTIONSe impostarne il valore -Duser.language=en-USo qualsiasi altra lingua-REGION desiderata.


1

È possibile applicare argomenti VM per un JARfile 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();

1

Puoi farlo:

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

E per acquisire impostazioni internazionali. Puoi farlo:

private static final String LOCALE = LocaleContextHolder.getLocale().getLanguage()
            + "-" + LocaleContextHolder.getLocale().getCountry();
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.