В C или C ++ вы можете создать языковой стандарт на основе имени, поэтому, если вы введете имя типа en-US
, это создаст соответствующий языковой стандарт (при условии, что вы используете одну из строк, о которой он знает - очевидно, большинство библиотек не будем распознавать каждую возможную строку).
Это имеет одну малоизвестную особенность: если вы предоставите пустую строку, она создаст языковой стандарт, соответствующий среде, настроенной пользователем (определяется некоторыми средствами, которые язык не определяет).
Итак, вы можете получить это и использовать его. Например:
#include <locale>
#include <iostream>
int main() {
auto loc = std::locale("");
std::cout << loc.name() << "\n";
}
На машине, которую я использую в данный момент (Linux), выводится: en_US.UTF-8
.