-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Closed
Labels
Description
Describe the Issue
Given this sample:
final var ARABIC_GREGORIAN_DATE_FORMATTER = DateTimeFormatter.ofPattern("EEEE dd\\MM\\yyyy G").localizedBy(Locale.forLanguageTag("ar"));
final var ENGLISH_GREGORIAN_DATE_FORMATTER = DateTimeFormatter.ofPattern("EEEE dd/MM/yyyy G").localizedBy(Locale.ENGLISH);
var now = Instant.now();
String arabicGregorianDate = ARABIC_GREGORIAN_DATE_FORMATTER.format(now.atZone(ZoneId.systemDefault()));
String englishGregorianDate = ENGLISH_GREGORIAN_DATE_FORMATTER.format(now.atZone(ZoneId.systemDefault()));
Log.info("arabicGregorianDate = " + arabicGregorianDate);
Log.info("englishGregorianDate = " + englishGregorianDate);When running in JVM mode, I get this output:
arabicGregorianDate = السبت 18\10\2025 م
englishGregorianDate = Saturday 18/10/2025 AD
However, when I compile it to GraalVM native-image and run it, I get this output:
arabicGregorianDate = Sat 18\10\2025 CE
englishGregorianDate = Saturday 18/10/2025 AD
Notice that Arabic word for Saturday السبت is fallbacked to Sat and م to CE?
I am using -H:IncludeLocales=ar,en as well.
I added the option -H:+TraceLocalizationFeature and I noticed the resource bundle sun.text.resources.cldr.FormatData with locale ar is included in native image (but does not work):
Adding bundle sun.util.resources.cldr.CalendarData, locale with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.util.resources.cldr.CurrencyNames, locale with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.util.resources.cldr.LocaleNames, locale with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.util.resources.cldr.TimeZoneNames, locale with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.text.resources.cldr.FormatData, locale with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.text.resources.cldr.FormatData, locale with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.util.resources.cldr.CalendarData, locale ar with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.util.resources.cldr.CurrencyNames, locale ar with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.util.resources.cldr.LocaleNames, locale ar with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.util.resources.cldr.TimeZoneNames, locale ar with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.text.resources.cldr.FormatData, locale ar with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.text.resources.cldr.FormatData, locale ar with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.util.resources.cldr.CalendarData, locale en_US with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.util.resources.cldr.CurrencyNames, locale en_US with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.util.resources.cldr.LocaleNames, locale en_US with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.util.resources.cldr.TimeZoneNames, locale en_US with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.text.resources.cldr.FormatData, locale en_US with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.text.resources.cldr.FormatData, locale en_US with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.util.resources.cldr.CalendarData, locale en with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.util.resources.cldr.CurrencyNames, locale en with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.util.resources.cldr.LocaleNames, locale en with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.util.resources.cldr.TimeZoneNames, locale en with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.text.resources.cldr.FormatData, locale en with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.text.resources.cldr.FormatData, locale en with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.util.resources.CalendarData, locale with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.util.resources.CurrencyNames, locale with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.util.resources.LocaleNames, locale with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.util.resources.TimeZoneNames, locale with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.text.resources.BreakIteratorInfo, locale with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.text.resources.BreakIteratorResources, locale with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.text.resources.CollationData, locale with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.text.resources.FormatData, locale with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.text.resources.FormatData, locale with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.util.resources.CalendarData, locale ar with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.util.resources.CurrencyNames, locale ar with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.util.resources.LocaleNames, locale ar with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.util.resources.TimeZoneNames, locale ar with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.text.resources.BreakIteratorInfo, locale ar with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.text.resources.BreakIteratorResources, locale ar with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.text.resources.CollationData, locale ar with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.text.resources.FormatData, locale ar with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.text.resources.FormatData, locale ar with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.util.resources.CalendarData, locale en_US with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.util.resources.CurrencyNames, locale en_US with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.util.resources.LocaleNames, locale en_US with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.util.resources.TimeZoneNames, locale en_US with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.text.resources.BreakIteratorInfo, locale en_US with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.text.resources.BreakIteratorResources, locale en_US with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.text.resources.CollationData, locale en_US with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.text.resources.FormatData, locale en_US with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.text.resources.FormatData, locale en_US with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.util.resources.CalendarData, locale en with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.util.resources.CurrencyNames, locale en with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.util.resources.LocaleNames, locale en with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.util.resources.TimeZoneNames, locale en with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.text.resources.BreakIteratorInfo, locale en with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.text.resources.BreakIteratorResources, locale en with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.text.resources.CollationData, locale en with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.text.resources.FormatData, locale en with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.text.resources.FormatData, locale en with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.util.logging.resources.logging, locale with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.util.logging.resources.logging, locale ar with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.util.logging.resources.logging, locale en_US with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Adding bundle sun.util.logging.resources.logging, locale en with condition ConfigurationCondition(type=class java.lang.Object, runtimeChecked=true)
Using the latest version of GraalVM can resolve many issues.
- I tried with the latest version of GraalVM.
GraalVM Version
25
Operating System and Version
Windows 11
Troubleshooting Confirmation
- I tried the suggestions in the troubleshooting guide.
Run Command
.
Expected Behavior
.
Actual Behavior
.
Steps to Reproduce
Reproducer: https://github.com/Eng-Fouad/graal-native-date-locale
Additional Context
No response
Run-Time Log Output and Error Messages
No response