在模块化程序 (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
。
我尝试将 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
。