2012-06-02 28 views
7

Tôi đang gặp phải một vấn đề ở đây.Bắt ngôn ngữ hệ điều hành trong java

Tôi là người Pháp và đang làm việc trên phiên bản tiếng Anh của Windows XP. Do đó, tôi đặt các tùy chọn khu vực thành tiếng Pháp, nhưng vẫn có giao diện người dùng bằng tiếng Anh.

Tôi đang làm việc trên một ứng dụng Java SE nhỏ và quyết định quốc tế hóa nó bằng cách sử dụng gói tài nguyên.

Để hiển thị ngôn ngữ thích hợp, tôi có thể tạo các bó với chức năng này:

private static ResourceBundle bundle = ResourceBundle 
      .getBundle("locale.Strings", Locale.getDefault()); 

Nhưng Locale.getDefault() chức năng trả về thiết lập khu vực (có nghĩa là: tiếng Pháp) và không phải là ngôn ngữ hệ thống giao diện người dùng. Do đó, giao diện người dùng của tôi mặc định là tiếng Pháp, trong môi trường tiếng Anh. Và tốt, đó không thực sự là những gì tôi mong đợi ...

Có ai biết cách khôi phục ngôn ngữ giao diện người dùng hệ thống độc lập không? Cảm ơn bạn trước!

Chỉnh sửa: cố định Local to Locale, cảm ơn.

+1

Vâng, có vẻ như với tôi rằng những gì Java làm là điều đúng. Nếu bạn cấu hình hệ điều hành của bạn với các tùy chọn tiếng Pháp và hệ điều hành sẽ hiển thị tất cả mọi thứ bằng tiếng Anh, nhưng không phải Java, hệ điều hành là không đúng, nhưng Java là, phải không? Nếu bạn muốn tất cả mọi thứ bằng tiếng Anh, tại sao bạn không cấu hình nó với sở thích tiếng Anh? –

+0

không nên là 'Locale.getDefault()' chứ không phải 'Local.getDefault()'? –

+7

@ JBNizet nó không phải là một yêu cầu bất thường như vậy. Tôi là người Hà Lan và, như OP, tôi thích ngôn ngữ GUI của mình là tiếng Anh, trong khi vẫn có định dạng số và định dạng ngày hiển thị theo cách tôi đã sử dụng từ miền địa phương của mình (ví dụ: ngày tháng đầu tiên của Hoa Kỳ là khá gây nhầm lẫn cho tôi, yêu cầu phân tích thêm thời gian trong bộ não của tôi). Các bản dịch phần mềm thường rất khốc liệt, gấp đôi trong các lĩnh vực như lập trình mà thuật ngữ là tiếng Anh. – Barend

Trả lời

7

Đây là cấu hình sai trong Windows. Locale#getDefault() trả về ngôn ngữ hệ thống, không phải là khu vực định dạng ngày/giờ hoặc vị trí.

Trong ảnh chụp màn hình cụ thể dưới đây của Windows XP, bạn chỉ có thể đặt Tùy chọn khu vựcNgôn ngữ sang tiếng Pháp hoặc bất kỳ thứ gì bạn thích. Trình đơn thả xuống trong menu Nâng cao thực sự đặt ngôn ngữ hệ thống và trong trường hợp của bạn phải được đặt thành tiếng Anh.

enter image description here

Phải thừa nhận rằng, đây là trong Windows XP diễn giải kém, Windows 7 có phải nó hơi tốt hơn:

enter image description here

+1

Điều đó không rõ ràng. Có sự khác biệt giữa Java 7 và các phiên bản trước. Ngoài ra, có thể có sự khác biệt giữa phiên bản Windows được bản địa hóa và MUI, nhưng trong trường hợp này tôi mong đợi tiếng Anh thay vì tiếng Pháp. Nó phức tạp lắm :) –

3

tôi không có phương tiện để thử nó ra (như tôi có xu hướng tránh bất cứ điều gì do Microsoft thực hiện), nhưng hãy xem xét những điều sau:

Java 7 bắt buộc:

Locale uiLocale = Locale.getDefault(Locale.Category.DISPLAY); 

Đó là những gì nên được sử dụng để nhận bản dịch (bắt đầu từ Java 7).

Nếu đây là không phải là rất hữu ích, tôi muốn thử:

System.out.println(System.getenv("LC_MESSAGES"));  
System.out.println(System.getenv("LANG")); 
System.out.println(System.getenv("LANGUAGE")); 

Tuy nhiên, trong trường hợp này tôi mong chờ một số điểm tương đồng với ngôn ngữ mặc định ...

0

Tôi đã thử một vài điều nhờ các đề xuất của bạn và đây là quan sát của tôi:

  • Nếu bạn đang sử dụng Java 6 chứ không phải Java 7, bạn sẽ bị thay đổi.
  • Nếu bạn đang sử dụng Java 7, bạn nên làm như BalusC cho biết: thay đổi cài đặt trong Cài đặt vùng và ngôn ngữ. Sau đó, Locale.getDefault() sẽ mặc định trả về ngôn ngữ hiển thị, nghĩa là tiếng Anh nếu bạn đặt nó sang tiếng Anh. Để đảm bảo nó, bạn có thể tạo miền địa phương bằng cách gọi Locale.getDefault (Locale.Category).DISPLAY)
Các vấn đề liên quan