Java Locale, Resource Bundle, Formatter

Locale

Các attribute của Locale

  • language: ISO alpha-2 hoặc alpha-3 hoặc tag tuỳ chỉnh, max 8 ký tự [a-zA-Z]{2,8}
  • country (region): ISO 3166 alpha-2 code, hoặc UN M.49 numeric-3 area code. [a-zA-Z]{2}|[0-9]{3}
  • variant
  • script: ISO 15924 alpha-4 code [a-zA-Z]{4}
  • extensions: map 1 ký tự sang String value

Các các khởi tạo Locale

  • static constants
  • contructors
  • builder() (JDK7)
  • static method forLanguageTag(String): empty locale nếu language không hợp lệ
  • builer.setLanguageTag(String) throw IllformedLocaleException nếu không hợp lệ

ResourceBundle

  • key luôn là String
  • có thể getString hoặc getObject
  • nếu key không tồn tại sẽ có exception MissingResourceException
  • có thể cast sang kiểu nguyên thuỷ khi getObject, Object tự động unboxed
  • Abstract class ListResourceBundle (phải extend) và class PropertyResourceBundle(từ InputStream hoặc Reader)

Thứ tự tìm và load ResourceBundle

Một resource bundle có thể là 1 file properties hoặc class ListResourceBundle (được ưu tiên dùng nếu có trong classpath). Tên của class extends ListResourceBundle có dạng như sau:

public class firstBundle_en_CA extends ListResourceBundle {

    protected Object[][] getContents() {
        return new Object[][]{
                {"yes", "Yea"},
                {"no", "Nah"},
                {"unsure", "Not sure"}
        };
    }
}

Dùng basename và locale đã input để tìm file properties, nếu không tìm được theo locale đã input, thử lại với locale default. Nếu không tìm được tiếp, thử tìm theo basename. Nếu không tìm được theo basename, MissingResourceException. Tất cả bundle nên có language.

Format message, Date và Number

  • SimpleDateFormat: hỗ trợ parse, format date và time với locale và normalization
  • NumberFormat: parse, format number với bất kỳ locale, các attribute hỗ trợ là decimal point, thousands separator, particular decimal degits, currency, percentage
  • DecimalFormat: subclass của NumberFormat.
  • ChoiceFormat: subclass của NumberFormat, hỗ trợ format cho range number, thường được sử dụng trong MessageFormat

https://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html

https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/text/MessageFormat.html

https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/text/DecimalFormat.html

https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/text/SimpleDateFormat.html

https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/format/DateTimeFormatter.html

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *