Просмотр исходного кода

LibJS: Cache the data locale used by Intl.DateTimeFormat

Unlike the locale, the data locale has Unicode locale extensions removed
(e.g. the data locale for "en-US-u-ca-gregory" is just "en-US"). Cache
the data locale for LibUnicode lookups during formatting.
Timothy Flynn 3 лет назад
Родитель
Сommit
d010ba10c3

+ 3 - 0
Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormat.cpp

@@ -129,6 +129,9 @@ ThrowCompletionOr<DateTimeFormat*> initialize_date_time_format(GlobalObject& glo
     // 23. Let dataLocale be r.[[dataLocale]].
     auto data_locale = move(result.data_locale);
 
+    // Non-standard, the data locale is needed for LibUnicode lookups while formatting.
+    date_time_format.set_data_locale(data_locale);
+
     // 24. Let timeZone be ? Get(options, "timeZone").
     auto time_zone_value = TRY(options->get(vm.names.timeZone));
     String time_zone;

+ 5 - 0
Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormat.h

@@ -46,6 +46,9 @@ public:
     String const& locale() const { return m_locale; }
     void set_locale(String locale) { m_locale = move(locale); }
 
+    String const& data_locale() const { return m_data_locale; }
+    void set_data_locale(String data_locale) { m_data_locale = move(data_locale); }
+
     String const& calendar() const { return m_calendar; }
     void set_calendar(String calendar) { m_calendar = move(calendar); }
 
@@ -129,6 +132,8 @@ private:
     String m_time_zone;                        // [[TimeZone]]
     Optional<Style> m_date_style;              // [[DateStyle]]
     Optional<Style> m_time_style;              // [[TimeStyle]]
+
+    String m_data_locale;
 };
 
 enum class OptionRequired {