2012-01-10 36 views
104

Tôi muốn đặt Ngôn ngữ mặc định cho JVM của tôi thành fr_CA. Các tùy chọn có thể thực hiện điều này là gì?làm cách nào để đặt ngôn ngữ mặc định cho JVM của tôi?

Tôi biết chỉ có một lựa chọn Locale.setDefault()

+1

Cẩn thận với [Java 7 thay đổi miền địa phương mặc định] (http://stackoverflow.com/questions/7107972/java-7-default-locale). – Vadzim

+0

Dup: http://stackoverflow.com/questions/64038/setting-java-locale-settings – Vadzim

Trả lời

111

Từ Oracle Reference:

Ngôn ngữ mặc định của ứng dụng được xác định theo ba cách. Đầu tiên, trừ khi bạn đã thay đổi rõ ràng mặc định, phương thức Locale.getDefault() trả lại ngôn ngữ đã được xác định lần đầu tiên bởi Máy ảo Java (JVM) khi nó được tải lần đầu tiên. Tức là, JVM xác định ngôn ngữ mặc định từ môi trường máy chủ. Miền địa phương của máy chủ lưu trữ đượ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 locale 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 phương thức Locale.setDefault(Locale) . Phương thức setDefault (Locale aLocale) cho phép ứng dụng của bạn đặt toàn bộ tài nguyên trên toàn hệ thống (thực tế là VM). Sau khi bạn đặt ngôn ngữ mặc định với phương thức này, các cuộc gọi tiếp theo tới Locale.getDefault() sẽ trả về miền địa phương mới được đặt .

+2

Đã thêm liên kết Javadoc. Tài liệu lớp 'Locale' khá rộng. – eckes

+0

là bất kỳ xung đột nào trong khi tìm nạp cùng một ngôn ngữ từ ResourceBundle.Tôi đã cố gắng tìm gói nhưng tôi đã có được những gì tôi đã có lúc đầu tiên –

107

Bạn có thể đặt nó trên dòng lệnh thông qua các thông số JVM:

java -Duser.country=CA -Duser.language=fr ... com.x.Main 

Để biết thêm thông tin nhìn vào Internationalization: Understanding Locale in the Java Platform - Using Locale

+4

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

+1

Qua [Ngôn ngữ mặc định Java 7] (http://stackoverflow.com/questions/7107972/java-7-default-locale): 'setx _JAVA_OPTIONS -Dsun.locale.formatasdefault = true/m' – Vadzim

28

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

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

Trong các câu trả lời ở đây, đến nay, chúng tôi tìm thấy hai cách để thay đổi JRE thiết lập ngôn ngữ:

  • Programatically, sử dụng Locale.setDefault() (trong đó, 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 của người sử dụng):

    Locale.setDefault(new Locale("pt", "BR")); 
    
  • Via đối số cho JVM:

    java -jar anApp.jar -Duser.language=pt-BR 
    

Nhưng, cũng giống như tham chiếu, tôi muốn lưu ý rằng, trên Windows, có một cách khác để thay đổi miền địa phương được JRE sử dụng, như được ghi lại here: thay đổi ngôn ngữ 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. Bắt đầu> Pa-nen điều khiển.

  2. Windows 7 và Vista: Nhấp vào Đồng hồ, Ngôn ngữ và khu vực>Khu vực và ngôn ngữ.

    Windows XP: Nhấp đúp vào Tùy chọn ngôn ngữ và khu vực biểu tượng.

    Các Tùy chọn ngôn ngữ và khu vực xuất hiện.

  3. Windows 7: Nhấp vào tab Hành chính.

    Windows XP và Vista: Nhấp vào tab Nâng cao.

    (Nếu không có tab Advanced, sau đó bạn chưa đăng nhập với đặc quyền quản trị.)

  4. Dưới ngôn ngữ cho chương trình phi Unicode phần, chọn ngôn ngữ mong muốn từ trình đơn thả xuống .

  5. Bấm OK.

    Hệ thống hiển thị hộp thoại hỏi có sử dụng các tệp hiện có hoặc để cài đặt từ đĩa CD hệ điều hành hay không. Đảm bảo rằng bạn đã có sẵn đĩa CD.

  6. Làm theo hướng dẫn được hướng dẫn để cài đặt tệp.

  7. Khởi động lại máy tính sau khi quá trình cài đặt hoàn tất.

Chắc chắn trên Linux JRE cũng sử dụng các thiết lập hệ thống để xác định miền địa phương để sử dụng, nhưng các hướng dẫn để thiết lập các thay đổi ngôn ngữ trên toàn hệ thống từ distro để distro.

+1

trong khi 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 là khác nhau của mỗi hệ điều hành và cho mỗi hệ điều hành, bạn có thể thiết lập một ngôn ngữ được sử dụng hệ thống rộng. Java được thiết kế để sử dụng ngôn ngữ đó làm ngôn ngữ mặc định bất cứ khi nào chúng tôi không rõ ràng đặt ngôn 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 cửa sổ chứ không phải trong java. – MozenRath

1

Bạn có thể thực thi đối số VM cho một tập tin JAR với đoạn mã sau:

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(); 
Các vấn đề liên quan