Java 9 nâng cao Internationalization: bật mặc định CLDR Locale Data (Unicode Common Locale Data Repository).
4 nguồn locale data
| Nguồn | Từ khóa | Mô tả |
|---|---|---|
| CLDR | CLDR | Unicode CLDR project – chuẩn quốc tế, cập nhật thường xuyên. |
| HOST | HOST | Tùy chỉnh OS của user hiện tại (date, time, number, currency format). |
| SPI | SPI | Locale-sensitive services từ installed SPI providers. |
| COMPAT (JRE) | COMPAT | Dữ liệu tương thích pre-Java 9. Deprecated, sẽ xóa tương lai. |
Thứ tự ưu tiên mặc định
Java 8: JRE mặc định. Java 9: CLDR ưu tiên cao nhất.
Cấu hình thứ tự provider
# Tùy chỉnh thứ tự ưu tiên java.locale.providers=CLDR,COMPAT,SPI,HOST # Mặc định Java 9 (nếu không set) java.locale.providers=CLDR,COMPAT,SPI # Tương thích Java 8 (COMPAT trước CLDR) java.locale.providers=COMPAT,CLDR
Cơ chế fallback
Nếu provider đầu tiên không cung cấp được locale data → tự động thử provider tiếp theo.
Tác động thực tế
- Format date/time/number/currency có thể khác Java 8 do CLDR data mới.
- Một số locale ít dùng có data tốt hơn nhờ CLDR.
- Có thể break ứng dụng phụ thuộc format cụ thể của JRE cũ → dùng
COMPAT,CLDRđể migration dần.
Properties files encoding
Java 9: properties files load với UTF-8 encoding mặc định. Nếu gặp lỗi → fallback ISO-8859-1. Ép buộc encoding:
java.util.PropertyResourceBundle.encoding=ISO-8859-1 # hoặc java.util.PropertyResourceBundle.encoding=UTF-8
CLDR làm Java 9+ tuân thủ chuẩn Unicode quốc tế, dữ liệu locale chính xác, cập nhật hơn.