मैं Locale
अपने JVM के लिए डिफ़ॉल्ट सेट करना चाहता हूंfr_CA
। ऐसा करने के लिए संभावित विकल्प क्या हैं?
मुझे केवल एक ही विकल्प का पता है Locale.setDefault()
मैं Locale
अपने JVM के लिए डिफ़ॉल्ट सेट करना चाहता हूंfr_CA
। ऐसा करने के लिए संभावित विकल्प क्या हैं?
मुझे केवल एक ही विकल्प का पता है Locale.setDefault()
जवाबों:
से ओरेकल संदर्भ :
आपके एप्लिकेशन का डिफ़ॉल्ट लोकेल तीन तरीकों से निर्धारित होता है। सबसे पहले, जब तक कि आपने स्पष्ट रूप से डिफ़ॉल्ट को नहीं बदला है,
Locale.getDefault()
विधि पहले से लोड होने पर जावा वर्चुअल मशीन (जेवीएम) द्वारा निर्धारित किए गए लोकल को वापस कर देती है। अर्थात्, JVM होस्ट वातावरण से डिफ़ॉल्ट लोकेल निर्धारित करता है। होस्ट परिवेश का होस्ट होस्ट ऑपरेटिंग सिस्टम और उस सिस्टम पर स्थापित उपयोगकर्ता प्राथमिकताओं द्वारा निर्धारित किया जाता है।दूसरा, कुछ जावा रनटाइम कार्यान्वयन पर, एप्लिकेशन उपयोगकर्ता इस आदेश द्वारा यह जानकारी प्रदान करके मेजबान के डिफ़ॉल्ट स्थान को ओवरराइड कर सकता है
user.language
,user.country
औरuser.variant
सिस्टम गुण।तीसरा, आपका एप्लिकेशन
Locale.setDefault(Locale)
विधि को कॉल कर सकता है । SetDefault (Locale aLocale) विधि आपके एप्लिकेशन को एक सिस्टमवाइड (वास्तव में VM- चौड़ा) संसाधन सेट करने देती है । जब आप इस विधि के साथ डिफ़ॉल्ट लोकेल सेट करते हैं, तो बाद में Locale.getDefault () पर कॉल नए सेट लोकेल को लौटा देगा।
आप इसे JVM मापदंडों के माध्यम से कमांड लाइन पर सेट कर सकते हैं:
java -Duser.country=CA -Duser.language=fr ... com.x.Main
अधिक जानकारी के लिए अंतर्राष्ट्रीयकरण देखें: जावा प्लेटफ़ॉर्म में लोकेल को समझना - लोकेल का उपयोग करना
setx _JAVA_OPTIONS -Dsun.locale.formatasdefault=true /m
आप जेवीएम आर्ग का उपयोग कर सकते हैं
java -Duser.country=ES -Duser.language=es -Duser.variant=Traditional_WIN
अब तक के उत्तरों में, हमें JRE लोकेल सेटिंग को बदलने के दो तरीके मिलते हैं:
स्थानीय रूप से , Locale.setDefault () का उपयोग करके (जो, मेरे मामले में, समाधान था, क्योंकि मैं उपयोगकर्ता की किसी भी कार्रवाई की आवश्यकता नहीं करना चाहता था):
Locale.setDefault(new Locale("pt", "BR"));
JVM के लिए तर्क:
java -jar anApp.jar -Duser.language=pt-BR
लेकिन, बस संदर्भ के रूप में, मैं यह नोट करना चाहता हूं कि, विंडोज पर, जेआरई द्वारा उपयोग किए जाने वाले लोकेल को बदलने का एक और तरीका है, जैसा कि यहां दस्तावेज : सिस्टम-वाइड भाषा को बदलना।
नोट : आपको उस खाते से लॉग इन होना चाहिए जिसमें प्रशासनिक विशेषाधिकार हो।
प्रारंभ> नियंत्रण कक्ष पर क्लिक करें ।
विंडोज 7 और विस्टा: क्लॉक, भाषा और क्षेत्र> क्षेत्र और भाषा पर क्लिक करें ।
Windows XP: क्षेत्रीय और भाषा विकल्प आइकन पर डबल क्लिक करें ।
क्षेत्रीय और भाषा विकल्प संवाद बॉक्स दिखाई देता है।
विंडोज 7: प्रशासनिक टैब पर क्लिक करें ।
Windows XP और Vista: उन्नत टैब पर क्लिक करें ।
(यदि कोई उन्नत टैब नहीं है, तो आप प्रशासनिक विशेषाधिकारों के साथ लॉग इन नहीं हैं।)
गैर-यूनिकोड प्रोग्राम अनुभाग के लिए भाषा के तहत , ड्रॉप डाउन मेनू से वांछित भाषा चुनें।
ओके पर क्लिक करें ।
सिस्टम एक संवाद बॉक्स प्रदर्शित करता है जिसमें पूछा गया है कि मौजूदा फ़ाइलों का उपयोग करना है या ऑपरेटिंग सिस्टम सीडी से इंस्टॉल करना है। सुनिश्चित करें कि आपके पास सीडी तैयार है।
फ़ाइलों को स्थापित करने के लिए निर्देशित निर्देशों का पालन करें।
स्थापना पूर्ण होने के बाद कंप्यूटर को पुनरारंभ करें।
निश्चित रूप से लिनक्स पर जेआरई सिस्टम सेटिंग्स का उपयोग करता है जो यह निर्धारित करने के लिए कि किस लोकेल का उपयोग करना है, लेकिन सिस्टम-वाइड भाषा को डिस्ट्रो से डिस्ट्रो में सेट करने के निर्देश।
अगर आप सिस्टम लोकल लेकिन जेवीएम को बदलना पसंद नहीं करते तो एक और दूर है। आप एक सिस्टम (या उपयोगकर्ता) पर्यावरण चर JAVA_TOOL_OPTIONS
सेट कर सकते हैं और इसके मान को -Duser.language=en-US
या किसी अन्य भाषा-क्षेत्र में सेट कर सकते हैं जो आप चाहते हैं।
आप 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();
तुम यह केर सकते हो:
और लोकेल पर कब्जा करने के लिए। तुम यह केर सकते हो:
private static final String LOCALE = LocaleContextHolder.getLocale().getLanguage()
+ "-" + LocaleContextHolder.getLocale().getCountry();