Tôi muốn đặt mặc định Locale
cho JVM của mình thành fr_CA
. Các tùy chọn có thể để làm điều này là gì?
Tôi chỉ biết một lựa chọn Locale.setDefault()
Tôi muốn đặt mặc định Locale
cho JVM của mình thành fr_CA
. Các tùy chọn có thể để làm điều này là gì?
Tôi chỉ biết một lựa chọn Locale.setDefault()
Câu trả lời:
Từ tài liệu tham khảo của Oracle :
Vị trí mặc định của ứng dụng của bạn được xác định theo ba cách. Đầu tiên, trừ khi bạn đã thay đổi rõ ràng mặc định,
Locale.getDefault()
phương thức trả về miền địa phương được xác định ban đầu bởi Máy ảo Java (JVM) khi được tải lần đầu tiên. Đó là, JVM xác định miền địa phương mặc định từ môi trường máy chủ. Ngôn ngữ của môi trường máy chủ được xác định bởi hệ điều hành máy chủ và tùy chọn người dùng được thiết lập trên hệ thống đó.Thứ hai, trên một số triển khai thời gian chạy Java, người dùng ứng dụng có thể ghi đè lên miền địa phương mặc định của máy chủ bằng cách cung cấp thông tin này trên dòng lệnh bằng cách thiết lập
user.language
,user.country
vàuser.variant
thuộc tính hệ thống.Thứ ba, ứng dụng của bạn có thể gọi
Locale.setDefault(Locale)
phương thức. Phương thức setDefault (Locale aLocale) cho phép ứng dụng của bạn thiết lập tài nguyên trên toàn hệ thống (thực sự là toàn VM) . Sau khi bạn đặt ngôn ngữ mặc định bằng phương thức này, các cuộc gọi tiếp theo đến Locale.getDefault () sẽ trả về miền địa phương mới được đặt.
Bạn có thể đặt nó trên dòng lệnh thông qua các tham số JVM:
java -Duser.country=CA -Duser.language=fr ... com.x.Main
Để biết thêm thông tin, hãy xem Quốc tế hóa: Tìm hiểu về Địa điểm trong Nền tảng Java - Sử dụng Địa điểm
setx _JAVA_OPTIONS -Dsun.locale.formatasdefault=true /m
Bạn có thể sử dụng JVM args
java -Duser.country=ES -Duser.language=es -Duser.variant=Traditional_WIN
Trong các câu trả lời ở đây, cho đến nay, chúng tôi tìm thấy hai cách thay đổi cài đặt ngôn ngữ JRE:
Theo lập trình, sử dụng Locale.setDefault () (trong trường hợp của tôi là giải pháp vì tôi không muốn yêu cầu bất kỳ hành động nào của người dùng):
Locale.setDefault(new Locale("pt", "BR"));
Thông qua các đối số cho JVM:
java -jar anApp.jar -Duser.language=pt-BR
Nhưng, chỉ là tài liệu tham khảo, tôi muốn lưu ý rằng, trên Windows, có một cách khác để thay đổi ngôn ngữ được JRE sử dụng, như được ghi lại ở đây : thay đổi ngôn ngữ trên toàn hệ thống.
Lưu ý : Bạn phải đăng nhập bằng tài khoản có Đặc quyền quản trị.
Nhấp vào Bắt đầu> Bảng điều khiển .
Windows 7 và Vista: Nhấp vào Đồng hồ, Ngôn ngữ và Vùng> Vùng và Ngôn ngữ .
Windows XP: Nhấp đúp vào biểu tượng Tùy chọn ngôn ngữ và khu vực .
Các Regional and Language Options hộp thoại xuất hiện.
Windows 7: Nhấp vào Quản trị tab .
Windows XP và Vista: Nhấp vào Nâng cao tab .
(Nếu không có tab Nâng cao, thì bạn không đăng nhập bằng đặc quyền quản trị.)
Trong phần Ngôn ngữ cho các chương trình không phải là Unicode , chọn ngôn ngữ mong muốn từ menu thả xuống.
Nhấn OK .
Hệ thống hiển thị hộp thoại hỏi xem có nên sử dụng các tệp hiện có hoặc cài đặt từ CD hệ điều hành. Đảm bảo rằng bạn đã có CD.
Thực hiện theo các hướng dẫn để cài đặt các tập tin.
Khởi động lại máy tính sau khi cài đặt hoàn tất.
Chắc chắn trên Linux, JRE cũng sử dụng các cài đặt hệ thống để xác định ngôn ngữ nào sẽ sử dụng, nhưng các hướng dẫn để đặt thay đổi ngôn ngữ trên toàn hệ thống từ distro sang distro.
Có một cách khác nếu bạn không muốn thay đổi ngôn ngữ hệ thống trừ JVM. bạn có thể thiết lập biến Môi trường (hoặc người dùng) JAVA_TOOL_OPTIONS
và đặt giá trị của nó thành -Duser.language=en-US
hoặc bất kỳ ngôn ngữ nào khác - KHU VỰC bạn muốn.
Bạn có thể thực thi các đối số VM cho một JAR
tệp với mã sau đây:
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());
}
}
}
Nó được sử dụng như sau:
JVMArgumentEnforcer jvmArgumentEnforcer = new JVMArgumentEnforcer("-Duser.language=pt-BR"); // For example
jvmArgumentEnforcer.forceArgument();
Bạn có thể làm được việc này:
Và để nắm bắt miền địa phương. Bạn có thể làm được việc này:
private static final String LOCALE = LocaleContextHolder.getLocale().getLanguage()
+ "-" + LocaleContextHolder.getLocale().getCountry();