回答:
Oracleリファレンスから:
アプリケーションのデフォルトのロケールは、3つの方法で決定されます。まず、デフォルトを明示的に変更していない限り、
Locale.getDefault()
メソッドは最初に読み込まれたときにJava仮想マシン(JVM)によって最初に決定されたロケールを返します。つまり、JVMはホスト環境からデフォルトのロケールを決定します。ホスト環境のロケールは、ホストオペレーティングシステムとそのシステムで確立されたユーザー設定によって決まります。第二には、いくつかのJavaランタイムの実装で、アプリケーションのユーザーが設定することで、コマンドライン上でこの情報を提供することで、ホストのデフォルトロケールを上書きすることができ
user.language
、user.country
およびuser.variant
システムプロパティを。3番目に、アプリケーションは
Locale.setDefault(Locale)
メソッドを呼び出すことができます。setDefault(Locale aLocale)メソッドを使用すると、アプリケーションでシステム全体(実際にはVM全体)のリソースを設定できます。このメソッドでデフォルトロケールを設定した後、Locale.getDefault()を呼び出すと、新しく設定されたロケールが返されます。
コマンドラインでJVMパラメータを使用して設定できます。
java -Duser.country=CA -Duser.language=fr ... com.x.Main
詳細については、「国際化:Javaプラットフォームでのロケールの理解-ロケールの使用」を参照してください
setx _JAVA_OPTIONS -Dsun.locale.formatasdefault=true /m
JVM引数を使用できます
java -Duser.country=ES -Duser.language=es -Duser.variant=Traditional_WIN
ここでの回答では、これまで、JREロケール設定を変更する方法が2つあります。
プログラム的には、Locale.setDefault()を使用します(私の場合、これは解決策でした。ユーザーのアクションを必要としないためです)。
Locale.setDefault(new Locale("pt", "BR"));
JVMへの引数を介して:
java -jar anApp.jar -Duser.language=pt-BR
ただし、参考までに、Windowsで、JREが使用するロケールを変更する方法がもう1つあることをここで説明します。システム全体の言語を変更することです。
注:管理者権限を持つアカウントでログインする必要があります。
[ スタート]> [コントロールパネル]をクリックします。
Windows 7およびVista:[時計、言語、地域]> [ 地域と言語]をクリックします。
Windows XP:[ 地域と言語のオプション ]アイコンをダブルクリックします。
[ 地域と言語のオプション ]ダイアログボックスが表示されます。
Windows 7:[ 管理 ]タブをクリックします。
Windows XPおよびVista:「詳細」タブをクリックします。
(「詳細」タブがない場合は、管理者権限でログインしていません。)
下ではUnicode対応でないプログラムの言語のためのセクション、ドロップダウンメニューから目的の言語を選択します。
OKをクリックします。
既存のファイルを使用するか、オペレーティングシステムのCDからインストールするかを尋ねるダイアログボックスが表示されます。CDの準備ができていることを確認します。
ガイド付きの指示に従ってファイルをインストールします。
インストールが完了したら、コンピューターを再起動します。
確かにLinuxでは、JREは使用するロケールを決定するためにシステム設定も使用しますが、システム全体の言語を設定する手順は、ディストリビューションからディストリビューションに変更されています。
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();