#pragma once #include #include #include #include namespace locale { using namespace std::literals; #include struct DoGetName { template constexpr auto Do() { return L::Name; } }; constexpr auto GetName(ELocale l) { return Do(l, DoGetName()); } struct DoGetFullName { template constexpr auto Do() { return L::FullName; } }; constexpr auto GetFullName(ELocale l) { return Do(l, DoGetFullName()); } template struct DoTranslate { template constexpr auto Do(Args&&... args) { return fmt::format(Lookup::Value(), std::forward(args)...); } }; template constexpr auto Translate(ELocale l, Args&&... args) { return Do(l, DoTranslate(), std::forward(args)...); } std::vector> ListLocales(); ELocale LookupLocale(std::string_view name); ELocale SystemLocaleOrEnglish(); } // namespace locale