2012-01-10 3 views
104

Я хочу установить локаль по умолчанию для моей JVM в fr_CA. Каковы возможные варианты для этого?Как установить языковой стандарт по умолчанию для моей JVM?

Я знаю только один вариант Locale.setDefault()

+1

Остерегайтесь [Java 7 изменения локали по умолчанию] (HTTP://stackoverflow.com/questions/7107972/java-7-default-locale). – Vadzim

+0

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

ответ

111

От Oracle Reference:

Стандарт по умолчанию для вашего приложения определяется тремя способами. Прежде всего, если вы явно не изменили значение по умолчанию, метод Locale.getDefault() возвращает исходную локаль, которая была первоначально определена виртуальной машиной Java (JVM) при ее первой загрузке. То есть, JVM определяет локаль по умолчанию из среды хоста. Хост локаль среды определяется операционной системой хоста и пользовательскими настройками, установленными в этой системе.

Во-вторых, в некоторых реализациях среды исполнения Java, пользователь приложения может переопределять локаль по умолчанию хоста, предоставляя информацию о командной строки, установив свойства системы user.language, user.country и user.variant.

В-третьих, ваше приложение может вызвать метод Locale.setDefault(Locale) . Метод setDefault (Locale aLocale) позволяет вашему приложению установить общесистемную систему (фактически VM-wide) ресурс. После того, как вы установили локаль по умолчанию с помощью этого метода , последующие вызовы Locale.getDefault() вернут новый набор настроек .

+2

Добавлены ссылки Javadoc. Документация класса «Локаль» довольно обширна. – eckes

+0

- их любой конфликт при получении одного и того же языка из ResourceBundle.Я попытался получить пакет, но я получил то, что у меня было первоначально –

107

Вы можете установить его в командной строке с помощью параметров виртуальной машины Java:

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

Для получения дополнительной информации смотрите на Internationalization: Understanding Locale in the Java Platform - Using Locale

+4

Вы также можете установить его через переменную окружения _JAVA_OPTIONS. –

+1

Через [Java 7 default locale] (http://stackoverflow.com/questions/7107972/java-7-default-locale): 'setx _JAVA_OPTIONS -Dsun.locale.formatasdefault = true/m' – Vadzim

28

Вы можете использовать JVM арг

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

В ответах здесь, до сих пор, мы находим два пути изменения языковой стандарт JRE:

  • Programatically, используя Locale.setDefault() (который, в моем случае, было решение, так как я не хотел требовать каких-либо действий пользователя):

    Locale.setDefault(new Locale("pt", "BR")); 
    
  • через аргументы в JVM:

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

Но, так же, как ссылки, я хочу отметить, что в Windows, есть еще один способ изменить локаль, используемую JRE, как описано here: изменение общесистемного языка.

Примечание: Вы должны войти в систему с учетной записью с правами администратора.

  1. Нажмите Пуск> Панель управления.

  2. Windows 7 и Vista: щелкните Часы, язык и регион>Регион и язык.

    Windows XP: Дважды щелкните по Региональные и языковые параметры icon.

    Региональные и языковые параметры Появляется диалоговое окно.

  3. Windows 7: Нажмите на Административный адрес.

    Windows XP и Vista: перейдите на вкладку Advanced.

    (Если нет вкладки Advanced, вы не вошли в систему с правами администратора.)

  4. Под Язык программ, не поддерживающих Unicode раздела, выберите нужный язык из выпадающего меню ,

  5. Нажмите ОК.

    Система отображает диалоговое окно с вопросом, следует ли использовать существующие файлы или установить с компакт-диска с операционной системы. Убедитесь, что вы подготовили компакт-диск .

  6. Для установки файлов следуйте инструкциям руководства.

  7. Перезагрузите компьютер после завершения установки.

Конечно на Линуксе JRE также использует системные настройки для определения локаль использовать, но инструкции для установки общесистемного изменения языка от дистрибутива к дистрибутиву.

+1

, хотя эта информация может быть полезна, я хотел бы подчеркнуть, что эти шаги отличаются от каждой ОС и для каждой ОС, вы можете настроить локаль, которая используется системой широкий. Java предназначен для использования этой локали в качестве локали по умолчанию всякий раз, когда мы явно не устанавливаем локаль по умолчанию. Таким образом, информация в этом ответе о том, как установить стандартную локаль в Windows, а не в java. – MozenRath

1

Вы можете применять параметры виртуальной машины для JAR файла со следующим кодом:

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

Он используется следующим образом:

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