Vaadin datepicker translation of Months

Viewed 88

Is there a way to make the datepicker display Months in an other language than the default English?

For example setting it in German/DE to display June as Juni ?

3 Answers

You can I18N-ize the DatePicker by setting a setI18n(DatePicker.DatePickerI18n) value. E.g.

def datePicker = new DatePicker().tap {
    setI18n(new DatePicker.DatePickerI18n().tap {
        def locale = Locale.GERMAN

        // date formats
        setDateFormats(
            DateTimeFormatterBuilder.getLocalizedDateTimePattern(
                FormatStyle.MEDIUM,
                null,
                IsoChronology.INSTANCE,
                locale
            ).replace('y', 'yyyy'),
            // this would be useful in theory, but is not in practice, because the first format always wins
            DateTimeFormatterBuilder.getLocalizedDateTimePattern(
                FormatStyle.SHORT,
                null,
                IsoChronology.INSTANCE,
                locale
            )
        )

        // days
        def daysOfWeek = [DayOfWeek.SUNDAY] + DayOfWeek.values().toList() // sunday first, because ISO is a joke for some
        setWeekdays(daysOfWeek*.getDisplayName(TextStyle.FULL, locale))
        setWeekdaysShort(daysOfWeek*.getDisplayName(TextStyle.SHORT, locale))
        setFirstDayOfWeek(WeekFields.of(locale).firstDayOfWeek.value % 7) // this works because, because value is + 1

        // months
        setMonthNames(Month.values()*.getDisplayName(TextStyle.FULL, locale))

        // words (use your translation backend here)
        setWeek("Woche")
        setToday("Heute")
        setCancel("Abbrechen")
    })
    addValueChangeListener{
        Notification.show(it.value.toString())
    }
}

This is my customer date picker:

package com.xyz.NoteService.component;

import com.vaadin.flow.component.datepicker.DatePicker;
import java.util.Arrays;
import java.util.Locale;

public class CustomerDatePicker extends DatePicker {

    public CustomerDatePicker(String label) {

        super.setLabel(label);
        super.setLocale(new Locale("de"));

        super.setI18n(
                new DatePickerI18n().setWeek("Woche").setCalendar("Kalender")
                    .setClear("Löschen").setToday("Heute")
                    .setCancel("Abbrechen").setFirstDayOfWeek(1)
                    .setMonthNames(Arrays.asList("Januar", "Februar",
                            "März", "April", "Mai", "Juni",
                            "Juli", "August", "September", "Oktober",
                            "November", "Dezember")).setWeekdays(
                    Arrays.asList("Sonntag", "Montag", "Dienstag",
                            "Mittwoch", "Donnerstag", "Freitag",
                            "Samstag")).setWeekdaysShort(
                    Arrays.asList("So", "Mo", "Di", "Mi", "Do", "Fr",
                            "Sa")));
    }

}
Related