#include "locale.hpp" #include #include #include #undef min #undef max namespace locale { std::vector> ListLocales() { std::vector> ret; ret.reserve(std::size_t(ELocale::MAXLocale)); for (ELocale l = ELocale(0); l < ELocale::MAXLocale; l = ELocale(int(l) + 1)) ret.emplace_back(GetName(l), GetFullName(l)); return ret; } ELocale LookupLocale(std::string_view name) { for (ELocale l = ELocale(0); l < ELocale::MAXLocale; l = ELocale(int(l) + 1)) if (name == GetName(l)) return l; return ELocale::Invalid; } ELocale SystemLocaleOrEnglish() { const char* sysLocale = std::setlocale(LC_ALL, nullptr); size_t sysLocaleLen = std::strlen(sysLocale); for (ELocale l = ELocale(0); l < ELocale::MAXLocale; l = ELocale(int(l) + 1)) { auto name = GetName(l); if (!name.compare(0, std::min(name.size(), sysLocaleLen), sysLocale)) return l; } return ELocale::en_US; } } // namespace locale