2012-01-10 13 views
104

Quiero establecer la Configuración regional predeterminada para mi JVM en fr_CA. ¿Cuáles son las posibles opciones para hacer esto?¿cómo configuro la configuración regional predeterminada para mi JVM?

No conozco una sola opción Locale.setDefault()

+1

Cuidado con [Java 7 cambios de configuración regional predeterminada] (http://stackoverflow.com/questions/7107972/java-7-default-locale). – Vadzim

+0

Dup: http://stackoverflow.com/questions/64038/setting-java-locale-settings – Vadzim

Respuesta

111

Desde Oracle Reference:

La configuración regional predeterminada de la aplicación se determina de tres maneras. En primer lugar, a menos que haya cambiado explícitamente el valor predeterminado, el método Locale.getDefault() devuelve la configuración regional que inicialmente se determinó mediante la Máquina virtual Java (JVM) cuando se cargó por primera vez. Es decir, la JVM determina la configuración regional predeterminada del entorno de host. La configuración regional del entorno host está determinada por el sistema operativo del host y las preferencias del usuario establecidas en ese sistema.

En segundo lugar, en algunas implementaciones Java de tiempo de ejecución, el usuario de la aplicación puede anular regional predeterminada del huésped, proporcionando esta información en la línea de comandos mediante el establecimiento de los user.language, user.country, y user.variant propiedades del sistema.

En tercer lugar, su aplicación puede llamar al método Locale.setDefault(Locale) . El método setDefault (Locale aLocale) permite que su aplicación establezca un recurso en todo el sistema (en realidad VM-wide). Después de establecer la configuración regional predeterminada con este método , las llamadas subsiguientes a Locale.getDefault() devolverán la nueva configuración regional .

+2

Agregados enlaces de Javadoc. La documentación de la clase 'Locale' es bastante extensa. – eckes

+0

es su conflicto al obtener la misma configuración regional de ResourceBundle.Traté de buscar el paquete, pero obtuve lo que tenía inicialmente, –

107

Se puede establecer en la línea de comandos a través de parámetros de JVM:

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

Para más información vistazo a Internationalization: Understanding Locale in the Java Platform - Using Locale

+4

También puede configurarlo a través de la variable de entorno _JAVA_OPTIONS. –

+1

A través de [configuración regional predeterminada de Java 7] (http://stackoverflow.com/questions/7107972/java-7-default-locale): 'setx _JAVA_OPTIONS -Dsun.locale.formatasdefault = true/m' – Vadzim

28

Puede utilizar argumentos de JVM

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

En las respuestas aquí, hasta ahora, encontramos dos formas de cambiar la configuración local JRE:

  • Programatically, utilizando Locale.setDefault() (que, en mi caso, era la solución, ya que no quería requiere ninguna acción del usuario):

    Locale.setDefault(new Locale("pt", "BR")); 
    
  • Via argumentos para la JVM:

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

Pero, apenas como referencia, quiero señalar que, en Windows, existe una forma más de cambiar la configuración regional que utiliza el JRE, tal como se documenta here: cambiar el idioma de todo el sistema.

Nota: Debe haber iniciado sesión con una cuenta que tenga privilegios administrativos.

  1. Haga clic en Inicio> Panel de control.

  2. Windows 7 y Vista: haga clic en Reloj, idioma y región>Región e idioma.

    Windows XP: haga doble clic en el icono Regional y Opciones de idioma .

    Aparece el cuadro de diálogo Regional and Language Options.

  3. Windows 7: haga clic en la ficha Administrativa.

    Windows XP y Vista: haga clic en la ficha Advanced.

    (Si no hay ninguna ficha Avanzada, entonces no se ha identificado con privilegios administrativos.)

  4. Bajo la Lengua para programas no Unicode sección, seleccione el idioma deseado en el menú desplegable .

  5. Haga clic en Aceptar.

    El sistema muestra un cuadro de diálogo que le pregunta si desea usar los archivos existentes o instalar desde el CD del sistema operativo. Asegúrese de tener listo para CD.

  6. Siga las instrucciones guiadas para instalar los archivos.

  7. Reinicie la computadora después de que se complete la instalación.

Ciertamente en Linux JRE también utiliza la configuración del sistema para determinar qué localización para su empleo, pero las instrucciones para configurar el cambio de idioma en todo el sistema de distribución a distro.

+1

, mientras que esta información puede ser útil, me gustaría resaltar que estos pasos son diferentes de cada sistema operativo y para cada sistema operativo, es posible que pueda configurar una configuración regional que se utiliza sistema amplio. Java está diseñado para usar esa configuración regional como configuración regional predeterminada siempre que no establezcamos explícitamente una configuración regional predeterminada. Entonces la información en esta respuesta se trata de cómo establecer la configuración regional predeterminada en Windows y no en Java. – MozenRath

1

Puede valer argumentos de VM para un archivo JAR con el siguiente código:

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()); 
     } 
    } 
} 

Se utiliza de la siguiente manera:

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