我尝试使用语言环境制作程序。我想用 GraalVM 本地编译这个程序,但是 Locale 在本地编译后没有相同的行为。
我成功地用以下程序隔离了问题:
import java.text.NumberFormat;
import java.util.Locale;
import java.util.Currency;
public class HelloWorld {
public static void main(String[] args) {
NumberFormat gbNumberFormat = NumberFormat.getCurrencyInstance(new Locale("en", "GB"));
gbNumberFormat.setCurrency(Currency.getInstance("USD"));
System.out.println(gbNumberFormat.format(1337));
NumberFormat usNumberFormat = NumberFormat.getCurrencyInstance(new Locale("en", "US"));
usNumberFormat.setCurrency(Currency.getInstance("USD"));
System.out.println(usNumberFormat.format(1337));
}
}
我可以用 Java 编译这个程序:
javac -d out/ HelloWorld.java
并执行它(从外部目录):
java HelloWorld
结果是:
US$1,337.00
$1,337.00
我现在可以制作原生图像并启动它:
native-image -cp out/ HelloWorld
./helloworld
结果不一样:
$1,337.00
$1,337.00
看起来我在本机模式下遇到了 i18n 的问题。我真的不明白为什么。我正在使用 graalvm-ce-java11-20.0.0 但我使用具有相同行为的先前版本进行了测试。
如有必要,我随时为您服务。