Làm cách nào để đặt ngôn ngữ mặc định trong JVM?


Câu trả lời:


156

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.countryuser.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.


là bất kỳ xung đột nào của họ trong khi tìm nạp cùng một miền từ ResourceBundle. Tôi đã cố gắng lấy gói nhưng tôi đã nhận được những gì tôi có ban đầu
Navdeep Singh

153

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


8
Bạn cũng có thể đặt nó thông qua biến môi trường _JAVA_OPTIONS.
Jeff Paquette

2
Qua ngôn ngữ mặc định của Java 7 :setx _JAVA_OPTIONS -Dsun.locale.formatasdefault=true /m
Vadzim

43

Bạn có thể sử dụng JVM args

java -Duser.country=ES -Duser.language=es -Duser.variant=Traditional_WIN

29

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ị.

  1. Nhấp vào Bắt đầu> Bảng điều khiển .

  2. 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.

  3. 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ị.)

  4. 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.

  5. 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.

  6. Thực hiện theo các hướng dẫn để cài đặt các tập tin.

  7. 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.


2
Mặc dù thông tin này có thể hữu ích, tôi muốn nhấn mạnh rằng các bước này khác nhau ở mỗi HĐH và đối với mỗi HĐH, bạn có thể thiết lập Địa điểm được sử dụng trên toàn hệ thống. Java được thiết kế để sử dụng miền địa phương đó làm miền địa phương mặc định bất cứ khi nào chúng ta không đặt rõ ràng miền địa phương mặc định. Vì vậy, thông tin trong câu trả lời này là về cách đặt ngôn ngữ mặc định trong windows chứ không phải trong java.
MozenRath

5

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_OPTIONSvà đặt giá trị của nó thành -Duser.language=en-UShoặc bất kỳ ngôn ngữ nào khác - KHU VỰC bạn muốn.


1

Bạn có thể thực thi các đối số VM cho một JARtệ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();

1

Bạn có thể làm được việc này:

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đâ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();
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.