Locale là gì?
Locale đại diện cho vùng địa lý, chính trị, văn hóa – dùng để localization (i18n): định dạng ngày, số, tiền tệ, ngôn ngữ hiển thị...
Constructor chính
new Locale(String language)– ví dụ: "en", "vi"new Locale(String language, String country)– ví dụ: "en", "US"new Locale(String language, String country, String variant)– variant ít dùng
Phương thức hữu ích
getDefault()– locale mặc định của JVMgetAvailableLocales()– tất cả locale hỗ trợgetDisplayName()– tên hiển thị (theo locale hiện tại)getDisplayLanguage(Locale),getDisplayCountry(Locale)getLanguage(),getCountry(),getVariant()
Ví dụ: Liệt kê 15 locale đầu tiên
import java.text.SimpleDateFormat;
import java.util.Locale;
public class LocaleDemo {
public static void main(String[] args) {
Locale[] locales = SimpleDateFormat.getAvailableLocales();
for (int i = 0; i < 15 && i < locales.length; i++) {
System.out.printf("%s (%s)%n", locales[i].getDisplayName(), locales[i]);
}
}
}
Kết quả (ví dụ)
Arabic (United Arab Emirates) (ar_AE)
Arabic (Jordan) (ar_JO)
Arabic (Syria) (ar_SY)
Croatian (Croatia) (hr_HR)
French (Belgium) (fr_BE)
Spanish (Panama) (es_PA)
Maltese (Malta) (mt_MT)
Spanish (Venezuela) (es_VE)
Bulgarian (bg)
Chinese (Taiwan) (zh_TW)
Italian (it)
Korean (ko)
Ukrainian (uk)
Latvian (lv)
Danish (Denmark) (da_DK)
Ứng dụng thực tế
Locale vn = new Locale("vi", "VN");
NumberFormat currencyFmt = NumberFormat.getCurrencyInstance(vn);
System.out.println(currencyFmt.format(1234567.89)); // 1.234.567,89 ₫ (tuỳ JDK)
DateFormat dateFmt = DateFormat.getDateInstance(DateFormat.LONG, vn);
System.out.println(dateFmt.format(new Date())); // 1 tháng 1 2024
Tóm lại: Locale là chìa khóa của internationalization (i18n) trong Java.