Code ví dụ đa ngôn ngữ với Java (ResourceBundle, Internationalization)

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)

Code ví dụ đa ngôn ngữ với Java (ResourceBundle, Internationalization)

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ó chung baseName. 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.propertiesngon_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

stackjava.com