站長留言

  • ✅ 本站維護及更新歷史紀錄,詳情請參考公告
  • ✅ 有任何意見、想法,歡迎留言給Spicy知道喔
  • ✅ 固定於每周一至周五更新Blogger文章,周末不定期
本地化程式網頁JavaVaadin

【Vaadin14】日期、時間本地化

tags: Vaadin

1

Common

  1. 官方元件未必提供本地化時間格式的功能
  2. 元件可能只有初始化那一次有套用本地化的時間格式,但之後都沒有套用

DatePicker

  • 這個元件的本身的月曆做i18n沒有問題,參考官方範例即可
  • 此元件有提供setLocale的方法,但仍不敷使用
    • 理由1:若使用zh-TW,則pattern為yyyy/M/d,參考ShortDatePattern
    • 理由2:若需求為yyyy/MM/ddMM/dd,則無法使用此方法滿足需求
  • 時間格式無法自定義,須改用Enhanced DatePicker

Enhanced DatePicker

EnhancedDatePicker datePicker;
datePicker.setPattern("MM/dd");

Bug說明

  • 但這個setPattern僅作用一次,後續可能會變回預設
  • 建議在event中,每次重複使用此元件時都要setPattern,以確保時間格式不會跑掉
// 避免pattern錯誤
component.addListener(e -> {    
    startDatePicker.setPattern("MM/dd");
    endDatePicker.setPattern("MM/dd");
});

Result

TimePicker

  • link
  • 若未設定Vaadin的Locale,則Vaadin預設會去找作業系統的語系
    • 作業系統的語系 O
    • 瀏覽器的語系 X
    • 使用者的語系 X

Bug說明

  • 但這個setLocale僅作用一次(初始化時),後續可能會變回預設或其他格式(HH:mm)
    • 狀況說明:格式會從上午12:00,變成12:00
  • 建議在event中,每次重複使用此元件時都要setLocale,以確保時間格式不會跑掉
// 避免pattern錯誤
component.addListener(e -> {    
    startTimePicker.setLocale(Locale.TAIWAN);
    endTimePicker.setLocale(Locale.TAIWAN);
});

Result

DateTimePicker

DateRangePicker

起訖時間 Addon

Improvement說明

  • withFormatLocale(Locale.TAIWAN);,並未套用至DatePicker
  • 解決辦法
    • 先避免元件取到作業系統的語系
    • 將元件語系設定至DatePicker

DateRangePicker.java #241

@Override
protected void onAttach(final AttachEvent attachEvent) {
    // 取得作業系統的語系,可能與系統不同
    //this.setLocaleFromClient();

    this.updateFromModel(true);

    this.addClickOutsideListener();
}

DateRangePickerOverlay.java #262

public void setModel(final DateRangeModel<D> model)
{
    final DateRangeModel<D> oldValue = this.currentModel;

    this.currentModel = model;
    this.updateComponentsFromModel(this.currentModel);

    this.fireValueChanged(oldValue, false);

    this.dpStart.setLocale(dateRangePicker.getFormatLocale());
    this.dpEnd.setLocale(dateRangePicker.getFormatLocale());
}

Result

Extensive Reading

Short Date Pattern


  1. 圖片來源
    https://www.vectorstock.com/royalty-free-vector/scheduled-date-and-time-vector-9234106 ↩︎

沒有留言:

張貼留言

本網站建議使用電腦或平板瀏覽