在模块化程序 (JDK17) 中使用 DateTimeFormatter 翻译 LocalDateTime

Translation of LocalDateTime with DateTimeFormatter in modularized program (JDK17)

我尝试将 LocalDateTime 翻译成当前使用的语言,如以下答案所示:

运行 Eclipse 中的程序按预期工作,但是当它使用 maven 和 jlink 部署时,它会退回到英语。

我想我缺少一个需要的模块?它是一个 JDK17 模块化应用程序。

我试过:

Locale loc = new Locale("de", "DE");
Locale.setDefault(loc);
lblDateTime.setText(LocalDateTime.now()
    .format(DateTimeFormatter.ofPattern("EEEE, dd. MMMM yyyy - HH:mm:ss");
lblDateTime.setText(LocalDateTime.now()
    .format(DateTimeFormatter.ofPattern("EEEE, dd. MMMM yyyy - HH:mm:ss", Locale.GERMAN);
lblDateTime.setText(LocalDateTime.now()
    .format(DateTimeFormatter.ofPattern("EEEE, dd. MMMM yyyy - HH:mm:ss").localizedBy(Locale.GERMAN);

在所有 3 种情况下,Eclipse 中的结果:

部署后的结果:

模块信息:

module [name] {
    [...]

    requires transitive javafx.controls;
    requires javafx.fxml;
    requires transitive javafx.graphics;
    requires org.apache.logging.log4j.core;
    requires javafx.base;
    requires org.controlsfx.controls;
    requires java.base;
    requires java.desktop;
}

更新 1:
两种情况下 System.getProperty("java.locale.providers") 的结果都是 null.

更新 2:
requires jdk.localedata; 添加到 module-info.java 解决了这个问题。查看已接受的答案。

当您构建优化环境但希望支持本地化时,您必须在您的环境中包含 jdk.localedata

Provides the locale data for locales other than US locale.

因此,要么在创建运行时映像时将 --add-modules jdk.localedata 指定为 jlink,要么将 requires jdk.localedata; 添加到您的 module-info.java