JVM'de varsayılan yerel ayarı nasıl ayarlarım?


Yanıtlar:


159

Gönderen Oracle Referans :

Uygulamanızın varsayılan yerel ayarı üç yolla belirlenir. İlk olarak, varsayılanı açık bir şekilde değiştirmediğiniz sürece, Locale.getDefault()yöntem ilk yüklendiğinde Java Sanal Makinesi (JVM) tarafından başlangıçta belirlenen yerel ayarı döndürür. Yani, JVM, ana bilgisayar ortamından varsayılan yerel ayarı belirler. Ana bilgisayar ortamının yerel ayarı, ana bilgisayar işletim sistemi ve bu sistemde oluşturulan kullanıcı tercihleri ​​tarafından belirlenir.

İkincisi, bazı runtime'a uygulamaları üzerinde, uygulama kullanıcı ayarlayarak komut satırında bu bilgi vererek konağın varsayılan yerel geçersiz kılabilirsiniz user.language, user.countryve user.variantsistem özelliklerini.

Üçüncüsü, uygulamanız Locale.setDefault(Locale) yöntemi çağırabilir . SetDefault (Locale aLocale) yöntemi, uygulamanızın sistem genelinde (aslında VM çapında) bir kaynak ayarlamasını sağlar. Bu yöntemle varsayılan yerel ayarı ayarladıktan sonra, sonraki Locale.getDefault () çağrıları yeni ayarlanan yerel ayarı döndürür.


ResourceBundle'dan aynı yerel ayarı getirirken ortaya çıkan herhangi bir çakışmadır. Paketi almaya çalıştım ama başlangıçta sahip olduğum şeyi aldım
Navdeep Singh


44

JVM argümanlarını kullanabilirsiniz

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

31

Buradaki cevaplarda, şimdiye kadar, JRE yerel ayarını değiştirmenin iki yolunu bulduk:

  • Programatik olarak, Locale.setDefault () kullanarak ( benim durumumda çözümdü, çünkü kullanıcının herhangi bir işlem yapmasını istemediğim için):

    Locale.setDefault(new Locale("pt", "BR"));
    
  • JVM'ye argümanlar aracılığıyla:

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

Ancak, referans olarak, burada belgelendiği gibi, Windows'ta JRE tarafından kullanılan yerel ayarı değiştirmenin bir yolu daha olduğunu belirtmek isterim : sistem genelinde dili değiştirmek.

Not : Yönetici Ayrıcalıklarına sahip bir hesapla oturum açmalısınız.

  1. Başlat> Denetim Masası'na tıklayın .

  2. Windows 7 ve Vista: Saat, Dil ve Bölge> Bölge ve Dil'i tıklayın .

    Windows XP: Bölge ve Dil Seçenekleri simgesine çift ​​tıklayın .

    Bölge ve Dil Seçenekleri iletişim kutusu görünür.

  3. Windows 7: Yönetim sekmesine tıklayın.

    Windows XP ve Vista: Gelişmiş sekmesine tıklayın.

    (Gelişmiş sekmesi yoksa, yönetici ayrıcalıklarıyla oturum açmamışsınızdır.)

  4. Altında Unicode olmayan programların dili bölümünde, açılır menüden istediğiniz dili seçin.

  5. Tıklayın Tamam .

    Sistem, mevcut dosyaların kullanılıp kullanılmayacağını veya işletim sistemi CD'sinden yüklenip yüklenmeyeceğini soran bir iletişim kutusu görüntüler. CD'nizin hazır olduğundan emin olun.

  6. Dosyaları yüklemek için kılavuzlu talimatları izleyin.

  7. Kurulum tamamlandıktan sonra bilgisayarı yeniden başlatın.

Kesinlikle Linux'ta JRE, hangi yerel ayarın kullanılacağını belirlemek için sistem ayarlarını kullanır, ancak sistem genelinde dili ayarlama talimatları dağıtımdan dağıtıma değişir.


2
bu bilgiler yardımcı olabilirken, bu adımların her işletim sistemi için farklı olduğunu ve her işletim sistemi için sistem genelinde kullanılan bir Yerel Ayar kurabileceğinizi vurgulamak isterim. Java, açık bir şekilde varsayılan bir yerel ayar belirlemediğimiz durumlarda bu yerel ayarı varsayılan yerel ayar olarak kullanmak üzere tasarlanmıştır. Yani bu cevaptaki bilgi, varsayılan yerel ayarların java'da değil, pencerelerde nasıl ayarlanacağıyla ilgilidir.
MozenRath

5

Sistem yerel ayarını değiştirmek istemiyorsanız, JVM'den başka bir uzakta daha var. Bir Sistem (veya kullanıcı) Ortamı değişkeni kurabilir JAVA_TOOL_OPTIONSve değerini -Duser.language=en-USveya istediğiniz başka bir dil-BÖLGE olarak ayarlayabilirsiniz .


1

JARAşağıdaki kodla bir dosya için VM bağımsız değişkenlerini zorunlu kılabilirsiniz :

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

Aşağıdaki gibi kullanılır:

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

1

Bunu yapabilirsiniz:

görüntü açıklamasını buraya girin

görüntü açıklamasını buraya girin

Ve yeri yakalamak için. Bunu yapabilirsiniz:

private static final String LOCALE = LocaleContextHolder.getLocale().getLanguage()
            + "-" + LocaleContextHolder.getLocale().getCountry();
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.