मैं JVM में डिफ़ॉल्ट लोकेल कैसे सेट करूं?


147

मैं Localeअपने JVM के लिए डिफ़ॉल्ट सेट करना चाहता हूंfr_CA । ऐसा करने के लिए संभावित विकल्प क्या हैं?

मुझे केवल एक ही विकल्प का पता है Locale.setDefault()



जवाबों:


156

से ओरेकल संदर्भ :

आपके एप्लिकेशन का डिफ़ॉल्ट लोकेल तीन तरीकों से निर्धारित होता है। सबसे पहले, जब तक कि आपने स्पष्ट रूप से डिफ़ॉल्ट को नहीं बदला है, Locale.getDefault()विधि पहले से लोड होने पर जावा वर्चुअल मशीन (जेवीएम) द्वारा निर्धारित किए गए लोकल को वापस कर देती है। अर्थात्, JVM होस्ट वातावरण से डिफ़ॉल्ट लोकेल निर्धारित करता है। होस्ट परिवेश का होस्ट होस्ट ऑपरेटिंग सिस्टम और उस सिस्टम पर स्थापित उपयोगकर्ता प्राथमिकताओं द्वारा निर्धारित किया जाता है।

दूसरा, कुछ जावा रनटाइम कार्यान्वयन पर, एप्लिकेशन उपयोगकर्ता इस आदेश द्वारा यह जानकारी प्रदान करके मेजबान के डिफ़ॉल्ट स्थान को ओवरराइड कर सकता है user.language , user.countryऔर user.variant सिस्टम गुण।

तीसरा, आपका एप्लिकेशन Locale.setDefault(Locale) विधि को कॉल कर सकता है । SetDefault (Locale aLocale) विधि आपके एप्लिकेशन को एक सिस्टमवाइड (वास्तव में VM- चौड़ा) संसाधन सेट करने देती है । जब आप इस विधि के साथ डिफ़ॉल्ट लोकेल सेट करते हैं, तो बाद में Locale.getDefault () पर कॉल नए सेट लोकेल को लौटा देगा।


रिसोर्सबंडल से एक ही लोकल प्राप्त करते समय उनका कोई संघर्ष नहीं है। मैंने बंडल लाने की कोशिश की लेकिन मुझे वह मिला जो मैंने शुरू में किया था
नवदीप सिंह

153

आप इसे JVM मापदंडों के माध्यम से कमांड लाइन पर सेट कर सकते हैं:

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

अधिक जानकारी के लिए अंतर्राष्ट्रीयकरण देखें: जावा प्लेटफ़ॉर्म में लोकेल को समझना - लोकेल का उपयोग करना


8
आप इसे _JAVA_OPTIONS पर्यावरण चर के माध्यम से भी सेट कर सकते हैं।
जेफ पैक्वे

2
वाया जावा 7 डिफॉल्ट लोकेल :setx _JAVA_OPTIONS -Dsun.locale.formatasdefault=true /m
वडज़िम


29

अब तक के उत्तरों में, हमें JRE लोकेल सेटिंग को बदलने के दो तरीके मिलते हैं:

  • स्थानीय रूप से , Locale.setDefault () का उपयोग करके (जो, मेरे मामले में, समाधान था, क्योंकि मैं उपयोगकर्ता की किसी भी कार्रवाई की आवश्यकता नहीं करना चाहता था):

    Locale.setDefault(new Locale("pt", "BR"));
  • JVM के लिए तर्क:

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

लेकिन, बस संदर्भ के रूप में, मैं यह नोट करना चाहता हूं कि, विंडोज पर, जेआरई द्वारा उपयोग किए जाने वाले लोकेल को बदलने का एक और तरीका है, जैसा कि यहां दस्तावेज : सिस्टम-वाइड भाषा को बदलना।

नोट : आपको उस खाते से लॉग इन होना चाहिए जिसमें प्रशासनिक विशेषाधिकार हो।

  1. प्रारंभ> नियंत्रण कक्ष पर क्लिक करें

  2. विंडोज 7 और विस्टा: क्लॉक, भाषा और क्षेत्र> क्षेत्र और भाषा पर क्लिक करें ।

    Windows XP: क्षेत्रीय और भाषा विकल्प आइकन पर डबल क्लिक करें ।

    क्षेत्रीय और भाषा विकल्प संवाद बॉक्स दिखाई देता है।

  3. विंडोज 7: प्रशासनिक टैब पर क्लिक करें ।

    Windows XP और Vista: उन्नत टैब पर क्लिक करें ।

    (यदि कोई उन्नत टैब नहीं है, तो आप प्रशासनिक विशेषाधिकारों के साथ लॉग इन नहीं हैं।)

  4. गैर-यूनिकोड प्रोग्राम अनुभाग के लिए भाषा के तहत , ड्रॉप डाउन मेनू से वांछित भाषा चुनें।

  5. ओके पर क्लिक करें

    सिस्टम एक संवाद बॉक्स प्रदर्शित करता है जिसमें पूछा गया है कि मौजूदा फ़ाइलों का उपयोग करना है या ऑपरेटिंग सिस्टम सीडी से इंस्टॉल करना है। सुनिश्चित करें कि आपके पास सीडी तैयार है।

  6. फ़ाइलों को स्थापित करने के लिए निर्देशित निर्देशों का पालन करें।

  7. स्थापना पूर्ण होने के बाद कंप्यूटर को पुनरारंभ करें।

निश्चित रूप से लिनक्स पर जेआरई सिस्टम सेटिंग्स का उपयोग करता है जो यह निर्धारित करने के लिए कि किस लोकेल का उपयोग करना है, लेकिन सिस्टम-वाइड भाषा को डिस्ट्रो से डिस्ट्रो में सेट करने के निर्देश।


2
जबकि यह जानकारी शायद सहायक हो, मैं यह उजागर करना चाहूंगा कि ये चरण प्रत्येक ओएस के अलग-अलग हैं और प्रत्येक ओएस के लिए, आप एक लोकेल को सेट करने में सक्षम हो सकते हैं जो सिस्टम वाइड का उपयोग किया जाता है। जब भी हम स्पष्ट रूप से डिफ़ॉल्ट लोकेल सेट नहीं कर रहे हैं, जावा उस लोकेल को डिफ़ॉल्ट लोकेल के रूप में उपयोग करने के लिए डिज़ाइन किया गया है। तो इस जवाब में जानकारी है कि विंडोज़ में डिफ़ॉल्ट लोकेल कैसे सेट करें और जावा में नहीं।
मोजिनरथ

5

अगर आप सिस्टम लोकल लेकिन जेवीएम को बदलना पसंद नहीं करते तो एक और दूर है। आप एक सिस्टम (या उपयोगकर्ता) पर्यावरण चर JAVA_TOOL_OPTIONSसेट कर सकते हैं और इसके मान को -Duser.language=en-USया किसी अन्य भाषा-क्षेत्र में सेट कर सकते हैं जो आप चाहते हैं।


1

आप JARनिम्न कोड वाली फ़ाइल के लिए VM तर्क लागू कर सकते हैं :

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

1

तुम यह केर सकते हो:

यहाँ छवि विवरण दर्ज करें

यहाँ छवि विवरण दर्ज करें

और लोकेल पर कब्जा करने के लिए। तुम यह केर सकते हो:

private static final String LOCALE = LocaleContextHolder.getLocale().getLanguage()
            + "-" + LocaleContextHolder.getLocale().getCountry();
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.