diff --git a/Userland/Libraries/LibUnicode/Locale.cpp b/Userland/Libraries/LibUnicode/Locale.cpp index 4f796c053b..7a5a75dc34 100644 --- a/Userland/Libraries/LibUnicode/Locale.cpp +++ b/Userland/Libraries/LibUnicode/Locale.cpp @@ -11,6 +11,10 @@ #include #include +#if ENABLE_UNICODE_DATA +# include +#endif + namespace Unicode { bool is_unicode_language_subtag(StringView subtag) @@ -149,4 +153,36 @@ Optional canonicalize_unicode_locale_id(LocaleID& locale_id) return builder.build(); } +String const& default_locale() +{ + static String locale = "en"sv; + return locale; +} + +bool is_locale_available([[maybe_unused]] StringView locale) +{ +#if ENABLE_UNICODE_DATA + static auto const& available_locales = Detail::available_locales(); + return available_locales.contains(locale); +#else + return false; +#endif +} + +Optional get_locale_territory_mapping([[maybe_unused]] StringView locale, [[maybe_unused]] StringView code) +{ +#if ENABLE_UNICODE_DATA + static auto const& available_locales = Detail::available_locales(); + + auto it = available_locales.find(locale); + if (it == available_locales.end()) + return {}; + + if (auto territory = Detail::territory_from_string(code); territory.has_value()) + return it->value.territories[to_underlying(*territory)]; +#endif + + return {}; +} + } diff --git a/Userland/Libraries/LibUnicode/Locale.h b/Userland/Libraries/LibUnicode/Locale.h index 45af6fa4a2..a9a84af63b 100644 --- a/Userland/Libraries/LibUnicode/Locale.h +++ b/Userland/Libraries/LibUnicode/Locale.h @@ -37,4 +37,9 @@ Optional parse_unicode_language_id(StringView); Optional parse_unicode_locale_id(StringView); Optional canonicalize_unicode_locale_id(LocaleID&); +String const& default_locale(); +bool is_locale_available(StringView locale); + +Optional get_locale_territory_mapping(StringView locale, StringView code); + }