Situation and problem, short
The LocalDateTimeRenderer in Vaadin 21 shows a German date in a German browser, even if the Locale in the Vaadin session is changed to e.g. Locale.UK.
Situation and problem, long / detailled
In a Vaadin 21 Grid I've got a column for LocalDateTime. It's created like this for an entity type T:
private <T> Column<T> addLocalDateTimeColumn(Grid<T> grid, ValueProvider<T, LocalDateTime> getter) {
LocalDateTimeRenderer<T> renderer = new LocalDateTimeRenderer(getter);
Column<T> column = grid.addColumn(renderer).setAutoWidth(true);
return column;
}
When I change the Locale in the session by calling UI.getCurrent().getSession().setLocale(locale); the whole application is translated into the new language, but not the content of the LocalDateTime-column.
Refreshing the whole Grid by calling grid.getDataProvider().refreshAll() (see here Vaadin 21: re-translate column with ItemLabelGenerator on locale change ) causes the ValueProvider in the code example above to get called again (a good indicator I think) but it does not format the LocalDateTime in the new selected language (this is the unexpected behavior).
So even if the locale in the session is English / Locale.UK, the LocalDateTime value is formatted in German like this:

Using a localized DateTimeFormatter like this LocalDateTimeRenderer<T> renderer = new LocalDateTimeRenderer(getter, DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL, FormatStyle.SHORT)); also did not help: the style was different but the months were still translated German.
Workaround
Using a custom TextRenderer works (= column LocalDateTime content is translated with the session's locale):
private <T> Column<T> addLocalDateTimeColumn(Grid<T> grid, ValueProvider<T, LocalDateTime> getter) {
Renderer<T> renderer = new TextRenderer<T>(new ItemLabelGenerator<T>() {
@Override
public String apply(T entity) {
final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd. MMMM yyyy HH:mm", UI.getCurrent().getLocale());
return getter.apply(entity).format(formatter);
}
});
Column<T> column = grid.addColumn(renderer).setAutoWidth(true);
return column;
}
Question
Is there some trick to get the same result with Vaadins LocalDateTimeRenderer?