0

我尝试使用语言环境制作程序。我想用 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 但我使用具有相同行为的先前版本进行了测试。

如有必要,我随时为您服务。

4

0 回答 0