Locale
JVM'm için varsayılanı olarak ayarlamak istiyorum fr_CA
. Bunu yapmak için olası seçenekler nelerdir?
Sadece bir seçenek biliyorum Locale.setDefault()
Yanıtlar:
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.country
veuser.variant
sistem ö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.
JVM parametreleri aracılığıyla komut satırında ayarlayabilirsiniz:
java -Duser.country=CA -Duser.language=fr ... com.x.Main
Daha fazla bilgi için Uluslararasılaştırma: Java Platformunda Yerel Ayarı Anlama - Yerel Ayarları Kullanma konusuna bakın
setx _JAVA_OPTIONS -Dsun.locale.formatasdefault=true /m
JVM argümanlarını kullanabilirsiniz
java -Duser.country=ES -Duser.language=es -Duser.variant=Traditional_WIN
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.
Başlat> Denetim Masası'na tıklayın .
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.
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.)
Altında Unicode olmayan programların dili bölümünde, açılır menüden istediğiniz dili seçin.
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.
Dosyaları yüklemek için kılavuzlu talimatları izleyin.
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.
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_OPTIONS
ve değerini -Duser.language=en-US
veya istediğiniz başka bir dil-BÖLGE olarak ayarlayabilirsiniz .
JAR
Aş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();