2011-11-30 53 views
5

Khả năng Java I18n thật tuyệt vời. hỗ trợ locales công trình hoàn hảo:Java I18n không được hỗ trợ Locales

Locale ar = new Locale("ar","SA"); 
System.out.println(ar.getDisplayName(ar)); 

kết quả đầu ra: العربية (السعودية)

Nhưng đối với miền địa phương không được hỗ trợ như Kazakh ngôn ngữ, tên ngôn ngữ được hiển thị trong cùng lang sẽ đầu ra trong Enlish (Tiêu chuẩn), như viết bằng Java Spec.

Locale locale = new Locale("kk","KZ"); 
System.out.println(kk.getDisplayLanguage(kk)); 

kết quả đầu ra: Kazakh (Kazakhstan)

Tôi đang cố gắng để giải quyết vấn đề này, mã cuối cùng phải đầu ra như thế này: Қазақша (Қазақстан).

Bất kỳ ai biết giải pháp?

Bất kỳ đoán (hoặc cách để liên hệ với nhà phát triển Java SE, hoặc với những người biết thuật toán) Tôi sẽ lưu ý là câu trả lời;)

Cảm ơn bạn!

Trả lời

1

Giả sử bạn chạy trên Windows, bạn cần thay đổi ngôn ngữ trong Cài đặt vùng OS. Vui lòng xem liên kết this. (Trên chiến thắng 2000 Kazakhstan xuất hiện, tuy nhiên, trên win 7 nó không xuất hiện trong danh sách ...). Trên Linux, bạn có thể đặt ngôn ngữ với localedef utility.

Chúc may mắn!

+0

Tốt hơn không bao giờ ^^ – erko

2

Giải pháp hiển nhiên nhất là tự cung cấp bản dịch, đó là để bên ngoài miền địa phương dựa trên giá trị của thuộc tính ngôn ngữ và quốc gia và đặt chúng vào dụ dụ ListResourceBundle. Nếu điều này có vẻ như rất nhiều công việc, cần ... Các giải pháp khác đáng để khám phá là sử dụng ICU.
Nó sẽ không cung cấp cho bạn tên hiển thị Locale trực tiếp, nhưng bạn có thể tạo đối tượng ULocale dựa trên Locale và điều này chỉ có thể được dịch.
Nếu thủ thuật ICU không hoạt động, bạn có thể bị buộc phải đi qua danh sách ngôn ngữ CLDR và tự cung cấp bản dịch. BTW. Người Serbia có chính xác cùng một vấn đề, tôi không chắc liệu họ đã sửa nó cho JDK7 ...

Các vấn đề liên quan