Я пытаюсь сделать программу, используя Locale. Я хочу изначально скомпилировать эту программу с 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, но я тестировал предыдущие версии с таким же поведением.
Я в вашем распоряжении, если необходимо.