Code ví dụ đa ngôn ngữ với Java (ResourceBundle, Internationalization)
ResourceBundle
là một class trong Java dùng để lấy dữ liệu / văn bản /string theo các ngôn ngữ khác nhau. Với mỗi ngôn ngữ ta có một file .properties
riêng để chứa message, label… cho ngôn ngữ đó. Và ResourceBundle
thực hiện đọc các file .properties
theo ngôn ngữ truyền vào.
Tạo Java Project
(Xem lại: tạo java project trên Eclipse)
File messages_en.properties
chứa message/label cho tiếng anh:
hello=Hello
File messages_vi.properties
chứa message/label cho tiếng việt:
hello=Xin Chào
Như các bạn thấy thì các file chứa message/label cho từng ngôn ngữ sẽ có định dạng: baseName_locale.properties
.
baseName
chính là bắt đầu tên file, các file ngôn ngữ đều phải có chungbaseName
. Trong ví dụ này thì baseName làmessages
, bạn có thể sửa lại baseName tùy theo ý của mình ví dụ:label_vi.properties
/label_en.properties
,ngon_ngu_vi.properties
/ngon_ngu_en.properties
…locale
chính là ngôn ngữ
File Demo.java
package stackjava.com.internationalize; import java.util.Locale; import java.util.ResourceBundle; public class Demo { public static void main(String[] args) { Locale localeEn = new Locale("en"); ResourceBundle labels = ResourceBundle.getBundle("messages", localeEn); System.out.println("Xin chào trong tiếng anh: "+labels.getString("hello")); Locale localeVi = new Locale("vi"); labels = ResourceBundle.getBundle("messages", localeVi); System.out.println("Xin chào trong tiếng việt: "+labels.getString("hello")); } }
Class Locale
trong Java được dùng để đại diện cho ngôn ngữ
Method ResourceBundle.getBundle(base_name, locale)
: Thực hiện lấy file chứa ngôn ngữ theo locale truyền vào.
Demo
Xin chào trong tiếng anh: Hello Xin chào trong tiếng việt: Xin Chào
Trong lập trình java web, thường thì ta sẽ lấy thông tin locale trong header do web browser gửi đi đó là lý do vì sao khi bạn dùng chrome tiếng việt thì một số trang web hiển thị tiếng việt, nhưng khi dùng chrome tiếng anh thì khi vào trang web đó nó lại hiển thị tiếng anh.
Ngoài ra bạn cũng có thể truyền local vào trong request, lưu trong cache…
Okay, Done!
Download code ví dụ trên tại đây.
References:
https://docs.oracle.com/javase/7/docs/api/java/util/ResourceBundle.html